Odważyłbym się powiedzieć, że wartości numeryczne obliczone przez Fortran i C++ będą bardziej podobne. Jednak z tego, czego doświadczam, okazuje się, że obliczone liczby zaczynają się rozchodzić po zbyt małej liczbie cyfr dziesiętnych. Natknąłem się na ten problem podczas przenoszenia starego kodu z poprzedniego do drugiego. Oryginalny kod Fortran 77 ...Rozbieżności między wartościami obliczonymi przez Fortran i C++
INTEGER M, ROUND
DOUBLE PRECISION NUMERATOR, DENOMINATOR
M = 2
ROUND = 1
NUMERATOR=5./((M-1+(1.3**M))**1.8)
DENOMINATOR = 0.7714+0.2286*(ROUND**3.82)
WRITE (*, '(F20.15)') NUMERATOR/DENOMINATOR
STOP
... wyjścia ,842201471328735, podczas gdy jego odpowiednik C++ ...
int m = 2;
int round = 1;
long double numerator = 5.0/pow((m-1)+pow(1.3, m), 1.8);
long double denominator = 0.7714 + 0.2286 * pow(round, 3.82);
std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(15)
<< numerator/denominator << std::endl;
exit(1);
... zwraca 0.842201286195064. Oznacza to, że obliczone wartości są równe tylko do szóstej cyfry dziesiętnej. Chociaż nie jestem szczególnie zwolennikiem Fortranu, czuję się skłonny do uznania jego wyników za "prawidłowe", biorąc pod uwagę jego wiarygodną reputację "cruncher liczby". Intryguje mnie jednak przyczyna tej różnicy między wyliczonymi wartościami. Czy ktoś wie, jaka może być przyczyna tej rozbieżności?
http://docs.sun.com/source/806-3568/ncg_goldberg.html –
C++ wynik jest bardziej poprawne '0.8422012861950640318689334181' – jfs
Może wydrukować niektóre wartości pośrednie w obu zestawach kodu. –