Мне нужно преобразовать Fortran кода в один на C++ и у меня есть следующая проблема:неправильно точность для двойных значений
Я пытаюсь вычислить двойное значение имени R12
с обоих языков Fortran-77 и C++, но я полученные два значения очень близко друг к другу, но с двумя разными точками. вот мой код Fortran:
R12 = sqrt(95699.68D0+1123.6D0*flx) - 408.99D0
с double flx = 192.9D0
. Значение я получаю это R12 = 149.97522253177789
я сделать то же самое с C++:
R12 = sqrt(95699.68+1123.6*flx) - 408.99 ;
значение я получаю здесь R12 = 149.97522253177794
.
Может вы, ребята, пожалуйста, помогите мне найти, где эта разница с, потому что это очень важно для моей работы, чтобы иметь точную точность
Определить "точную точность"? Используя значения с плавающей запятой, у вас никогда не будет «точной точности», и для иррациональных чисел вам понадобится бесконечная точность. 'double' имеет 15-17 чисел точности, и это то, что вы здесь. –
Вы также можете прочитать об этом здесь: http://en.wikipedia.org/wiki/Machine_epsilon – CppChris
Вы проверили, что (1) результат умножения идентичен на обоих языках? (2) результат сложения идентичен на обоих языках? (3) результат «sqrt» идентичен на обоих языках? Вам нужно разобраться в сути проблемы * перед тем, как спросить о SO. –