Переключение с 53-битного на 64-битный FPU в Fortran - PullRequest
0 голосов
/ 09 октября 2009

Я портирую код Fortran с Fortran PowerStation (версия 4.0) на компилятор Fortran 11 (2003). Старый компилятор (PowerStation) имеет 53-битную точность. При портировании на новый компилятор я не получаю правильные или точные значения для моих переменных real / float. Я надеюсь, что новый компилятор имеет 64-битную точность. Поэтому я думаю, что мне нужно изменить FPU (единицу с плавающей запятой) с 53-битной на 64-битную точность. Это правильно? Если да, то как мне изменить 53-битную на 64-битную точность, используя свойства нового компилятора? Если нет, что мне делать?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 11 октября 2009

Переносимый способ запроса точности с плавающей запятой в Fortran 90/95/2003 - с помощью встроенной функции selected_real_kind. Например, integer, parameter :: DoubleReal_K = selected_real_kind (14) определит целое число DoubleReal_K, которое определяет переменную с плавающей запятой по крайней мере с 14 десятичными цифрами: real (DoubleReal_K) :: MyFloat. Запрос 14 десятичных цифр, как правило, приводит к плавающей запятой двойной точности с 53 битами, но единственная гарантия - 14 десятичных цифр.

Если вам нужна большая точность, используйте большее значение, чем 14, чтобы указать более длинный тип - 17 десятичных цифр могут получить расширенную точность (64 бита) или квадрупольную точность, или ничего, в зависимости от компилятора. Если у компилятора будет доступный больший тип, он предоставит его ... В противном случае, получите лучший компилятор. Почему вы используете такой старый и неподдерживаемый компилятор? Кроме того, не ожидайте точных результатов от вычислений с плавающей запятой - это нормально, если изменения вызывают небольшие изменения в результатах.

1 голос
/ 09 октября 2009

Вы надеетесь, что новый компилятор имеет 64-битную точность? Я ожидаю, что вы прочитали руководство и сами это выясните, но если вы не можете этого сделать, скажите нам, какой компилятор вы используете, и кто-то может помочь.

Насколько отличаются результаты старого кода и кода, скомпилированного с новым компилятором? Конечно, результаты не будут точно такими же, если точность изменилась - как они могут быть, если вы не предпримете особые шаги для обеспечения сходства.;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...