berechneten Werten Ich hätte es gewagt, zu sagen, dass die von Fortran und C++ berechneten numerischen Werte viel ähnlicher wären. Wie sich jedoch herausstellt, beginnen die berechneten Zahlen nach zu wenigen Dezimalstellen zu divergieren. Ich bin auf dieses Problem während der Portierung einiger Legacy-Codes von der früheren auf die letztere Sprache gestoßen. Der ursprüngliche Fortran 77 Code ...Diskrepanz zwischen den von Fortran und 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
... Ausgänge 0,842201471328735, während die C++ Äquivalent ...
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);
... kehrt 0,842201286195064. Das heißt, die berechneten Werte sind gleich nur bis zur sechsten Dezimalzahl. Obwohl ich kein Fortran-Befürworter bin, fühle ich mich geneigt, seine Ergebnisse als die "richtigen" zu betrachten, angesichts seines legitimen Rufs als Number Cruncher. Ich bin jedoch über die Ursache dieses Unterschieds zwischen den berechneten Werten fasziniert. Weiß jemand, was der Grund für diese Diskrepanz sein könnte?
http://docs.sun.com/source/806-3568/ncg_goldberg.html –
C++ Ergebnis ist richtiger '0.8422012861950640318689334181' – jfs
Vielleicht könnten Sie in beiden Sätzen von Code einige Zwischenwerte ausdrucken. –