Fortran と C++ で計算された数値は、はるかに類似していると言っても過言ではありません。ただし、私が経験したことから、計算された数値は、小数点以下の桁数が少なすぎると発散し始めることがわかりました。以前の言語から後者の言語に一部のレガシー コードを移植するプロセス中に、この問題に遭遇しました。元の Fortran 77 コード...
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
... 0.842201471328735を出力しますが、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);
... 0.842201286195064を返します。つまり、計算された値は、小数点以下 6 桁までしか等しくありません。特に Fortran の支持者というわけではありませんが、数値計算機としての正当な評判を考えると、その結果を「正しい」ものと見なす傾向があると感じています。ただし、この計算値の違いの原因については興味があります。この不一致の理由を知っている人はいますか?