2015-04-20 4 views
-2

Когда Я делаю interating сумму по двойной стоимости точности:Fortran двойной точности

REAL*8 :: a 
    INTEGER :: p 

    a = 0.0d0 
    DO p = 1,10 
    a = a + 1d-04 
    END DO 

я получаю следующий ответ:

p =1 - a = 1.000000000000000D-004 
    p =2 - a = 2.000000000000000D-004 
    p =3 - a = 3.000000000000000D-004 
    p =4 - a = 4.000000000000000D-004 
    p =5 - a = 5.000000000000000D-004 
    p =6 - a = 6.000000000000001D-004 

Почему в Интерактивного р = 6 я получаю номер 1 в конце переменной «a»?

ответ

0

В Fortran двойной (или реальный) номер с плавающей запятой (например, см. https://en.wikipedia.org/wiki/Floating_point). Номера с плавающей запятой не могут правильно представлять каждое десятичное число и ошибки округления.