Я бы посмел сказать, что числовые значения, рассчитанные Fortran и C++, были бы более похожими. Однако из того, что я испытываю, оказывается, что расчетные числа начинают расходиться после слишком большого количества десятичных цифр. Я столкнулся с этой проблемой во время переноса некоторого старого кода с прежнего языка на последний. Оригинальный Fortran 77 код ...Несоответствие между значениями, вычисленными Fortran и 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
... выходы +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. То есть вычисленные значения равны только до шестого десятичного знака. Хотя я и не особенно сторонник Фортрана, я склонен рассматривать его результаты как «правильные», учитывая его законную репутацию числа cruncher. Однако я заинтригован причиной этой разницы между вычисленными значениями. Кто-нибудь знает, в чем причина этого несоответствия?
http://docs.sun.com/source/806-3568/ncg_goldberg.html – 2010-05-03 10:40:03
C++ результат является более правильным '0.8422012861950640318689334181' – jfs
Может быть, вы могли бы напечатать некоторые промежуточные значения в обоих наборах кода. –