У меня есть большой старый код на FORTRAN 77, который работал много-много лет без проблем. Двойной точности уже недостаточно, поэтому для преобразования в четверную точность у меня есть:
- Все вхождения REAL8 заменены на REAL16.
- Заменены все функции, такие как DCOS(), на такие функции, как COS().
- Заменены все встроенные числа, такие как 0.d0 на 0.q0 и 1D+01 на 1Q+01.
Программа компилируется без ошибок и предупреждений компилятором gcc-4.6 на
- операционная система: openSUSE 11.3 x86_64 (64-разрядная операционная система)
- аппаратное обеспечение: Intel Xeon E5-2650 (Sandy Bridge)
Моя переменная LD_LIBRARY_PATH установлена в папку 64-битной библиотеки: /gcc-4.6/lib64
Программа читает входной файл, содержащий числа. Раньше эти числа имели форму 1.234D+02 (для версии кода с двойной точностью, которая работает). Я изменил их, так что теперь это число 1.234Q+02 , однако я получаю ошибку времени выполнения:
Неправильное действительное число в элементе 1 ввода списка
Указывает, что подпрограмма, считывающая данные из входного файла (названная read.f), не находит первое число во входном файле, чтобы быть совместимым с ожидаемым.
Как ни странно, версия кода с четверной точностью не жалуется, когда входной файл содержит числа вроде 1,234D+02 или 123,4 (которые, судя по выходным данным, автоматически преобразуются в форму 1,234D). +02, а не Q+02), ему просто не нравится Q+02 , поэтому кажется, что gcc-4.6 не позволяет считывать числа с четверной точностью из входных файлов в экспоненциальном представлении!
Удалось ли кому-нибудь когда-нибудь прочитать из входного файла число четверной точности в экспоненциальном представлении (например, 1234Q+02) на FORTRAN с помощью компилятора gcc, и если да, то как вы заставили его работать? (или вам понадобился другой компилятор/операционная система/аппаратное обеспечение, чтобы заставить его работать?)
real(wp)
и1._wp
). Затем вы просто настраиваетеwp
в верхнем модуле на то, что вам нужно в данный момент. - person Vladimir F   schedule 09.08.2013