Я новичок в Fortran, так что простите меня, если я делаю что-то глупое в следующем коде:Программа Fortran дает неправильный результат?
program test2
implicit none
! Variable declaration
integer :: i, n
real :: s
! Initialization
n = 1e+9
s = 0.0
do i=1,n
s = s + real(i)
s = s + sqrt(s)
end do
print *, s
end program test2
Эта небольшая программа выводит: 1.8014399E+16
, и я ожидаю, что это даст 1.0000000010000024E+18
. Я использую компилятор GNU Fortran на компьютере под управлением Windows 10.
Обычно я использую длинные симуляции с участием многих матриц. Матричные умножения, конкатенации, переформатирование, индексирование, БПФ, генерации случайных чисел, MAX, среднее значение, мощности, сложные числа и т. Д. Являются типичными операциями, которые я использую, и я читал, что Modern Fortran с большой поддержкой матричных операций со сверхвысокими скоростями. – AboAmmar
Если вы измените 'real :: s' на 'double precision :: s', вы получите ответ, который вы ожидаете? – francescalus
Ничего себе, это правильно. Но я пробовал много других вещей, таких как 'kind = 16',' real * 16' и т. Д., Но все не сработало, знаете ли вы, почему? – AboAmmar