Точность результатов умножения чисел на Fortran Visual Studio 2013
В Visual Studio 2013 создано два проекта: первый для одного ядра, второй - с использованием инструкций OpenMP для четырех ядер. Решается одна и та же задача (все входные данные идентичны). Результаты отличаются. При проверке выяснилось, что для проектов разная точность результатов умножения. В нераспараллеленную часть кода передаются две переменные, которые нужно умножить.
print*,CT1,TA(I,J,K),(CT1 * TA(I,J,K))
результат на одном ядре: -3,5е-6 12,89648 -4,5137684е-5
результат на 4-х ядрах: -3,5е-6 12,89648 -4,5137665е-5
Умножение на Python
a=-3.5e-6
b=12.89648
c=a*b
print("{:.10e}".format(c))
-4.5137680000e-05
Переменные объявлены одинаково, настройки студии одинаковы. Floating point model установлена precise. Изменение этих настроек не помогает. Подскажите пожалуйста в чем может быть проблема.
Ответы (1 шт):
В качестве капитана Очевидность можно отметить, что различия, в некотором смысле, составляют единицу последнего разряда (например, в одном случае, результата, в другом случае, входных данных):
program t
implicit none
real*4 r4, a, b
integer*4 i4
equivalence (r4, i4)
a = -3.5e-6
b = 12.89648
r4 = a*b
print '(z8,es15.7)', i4, r4
r4 = r4*(1.e0 + epsilon(1.e0))
print '(z8,es15.7)', i4, r4
a = a*(1.e0 - epsilon(1.e0))
b = b*(1.e0 - epsilon(1.e0))
r4 = a*b
print '(z8,es15.7)', i4, r4
end program t
Получает все ваши числа:
B83D5237 -4.5137680E-05
B83D5238 -4.5137684E-05
B83D5233 -4.5137665E-05