Реальный тип данных Fortran 90

Простой вопрос Подобный вопрос был там, но я не получил тот, который ищу.

Я просто проверял пределы реального типа данных в Fortran 90 (используя компилятор ifort), причина в том, что мой реальный код может достичь этого предела. Чтобы проверить, я просто дал параметр mval1 (см. Код) и умножил на 2. В руководстве ifort говорится, что максимальное значение, которое он может принять, составляет 10E38, а мое значение намного меньше этого. Но во время печати он принимает случайные цифры в конце (вывод дан внизу). Может ли кто-нибудь помочь мне через это

PROGRAM TEST

  IMPLICIT NONE
  REAL(KIND=8), PARAMETER :: mval1 = 1073E12
  REAL(KIND=8) :: j
  j = real(2*mval1)
  PRINT *, j,mval1

END PROGRAM TEST

Выход

 2.146000005234688E+015  1.073000002617344E+015

1 ответ

Решение

Два момента, чтобы добавить к комментарию, который вы уже имели.

Один: в Intel Fortran real(kind=8) переменные такие же, как числа двойной точности IEEE-754, и максимальное положительное значение 1.797693134862316E+308, Для чисел с плавающей запятой IEEE одинарной точности, Intel Fortran real(kind=4) максимальное значение 3.4028235E+38 который примерно ваш 10E38,

Два: Ваша декларация

REAL(KIND=8), PARAMETER :: mval1 = 1073E12

присваивает значение реального вида по умолчанию mval1, Я не знаю, какие у вас настройки компилятора по умолчанию, но проверьте, что произойдет, если вы измените эту строку на

REAL(KIND=8), PARAMETER :: mval1 = 1073E12_8

который явно заявляет, что литерал имеет kind=8,

Ответ на вопрос, который вы не совсем задаете, и который вам не совсем дают другие комментарии, таков: арифметика с плавающей запятой сложна, и программисты, которые ее используют, должны ознакомиться хотя бы с основными приемами. Статья в Википедии о числах с плавающей точкой и арифметике - хорошая отправная точка для вашего самообразования. Все, что кто-либо говорит вам, игнорируйте статью Голдберга. Что должен знать каждый компьютерщик об арифметике с плавающей точкой, пока вы не начнете пытаться реализовать свои собственные числа и арифметику с плавающей точкой.

Другие вопросы по тегам