J'aurais osé dire que les valeurs numériques calculées par Fortran et C++ seraient beaucoup plus similaires. Cependant, d'après ce que je vis, il s'avère que les nombres calculés commencent à diverger après trop peu de chiffres décimaux. J'ai rencontré ce problème pendant le processus de portage du code hérité de l'ancienne langue vers le second. L'original Fortran 77 ...Discordance entre les valeurs calculées par Fortran et 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
... sorties ,842201471328735, tandis que son équivalent 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);
... retourne ,842201286195064. C'est-à-dire que les valeurs calculées sont égales à jusqu'à la sixième décimale. Bien que n'étant pas particulièrement un avocat Fortran, je suis enclin à considérer ses résultats comme les «vrais», compte tenu de sa réputation légitime de cruncher. Cependant, je suis intrigué par la cause de cette différence entre les valeurs calculées. Est-ce que quelqu'un sait ce que la raison de cet écart pourrait être?
http://docs.sun.com/source/806-3568/ncg_goldberg.html –
C++ résultat est plus correct '0.8422012861950640318689334181' – jfs
Peut-être que vous pouvez imprimer quelques valeurs intermédiaires dans les deux ensembles de code. –