Значение, прочитанное из файла, хранится как другое значение в Fortran - PullRequest
1 голос
/ 24 сентября 2010

У меня есть входной файл, и первая строка содержит следующий десятичный знак.

0.5053102074297753

У меня есть программа Fortran 90, которая читает файл и выводит значение.Это вывод:

0.5053101778030396

Видимо, то, что хранится, не совпадает с тем, что читается.Вопрос в том, почему?

Ответы [ 2 ]

2 голосов
/ 24 сентября 2010

Что должен знать каждый компьютерщик об арифметике с плавающей точкой .

Реальной точности по умолчанию недостаточно для сохранения числа с 16 десятичными знаками в дробной части.

2 голосов
/ 24 сентября 2010

Как объявляется ответ?Если это реальная единичная точность, вы можете ожидать только около 6 десятичных цифр точности.

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

Чтобы объявить ответ с двойной точностью, используйте следующее:

integer, parameter :: DRK = selected_real_kind (14)
real (kind=DRK) :: answer

Это гарантирует, что ответ будет содержать не менее 14 десятичных цифр.«DRK» может использоваться во всей вашей программе.В зависимости от вашего компилятора, вы можете попробовать запросить еще больше цифр ... он может предоставить такой тип.Редко требуется более чем двойная точность.

...