У меня есть код следующим образом:выражение Intel Fortran возвращает неправильный результат
program th
implicit none
integer N1
integer maxi,ei,Nc,ns,na
real CH1,CH2
OPEN(unit=1,file='input_file',status="old")
read(1,*) ns !!!
read(1,*) ei !!!!!!!!!!!!!!!
read(1,*) maxi!!!!!!!!!!!!!!!!!!!
read(1,*) N1!!!!!!!!!!!!!!!!
close(unit=1)
CH1 = 0.07
CH2 = -0.35
Na = INT(abs(2.*((N1/2)*CH1 + (N1/2)*CH2)))
write(*,*) Na,abs(2.*((real(N1)/2.)*CH1 + (real(N1)/2.)*CH2));stop
end program th
и входной файл является
1 !!!!!!!!!!!
1 !!!!!!!!!!
1 !!!
1600
Тогда я скомпилировать его с
ifort -O3 -autodouble t1.f90 -o out
, но когда я выполните его, я получаю 447 для na
, что является неправильным. Правильный ответ - 448.
Да, это должно быть 448. Что произойдет, если вы удалите INT()? В любом случае это Integer. Как насчет того, если вы скомпилируете его без -autodouble? – Dijkgraaf
Проблема в том, что мне нужно autodouble в остальной части кода –
Да, я не говорю, что нужно удалить его навсегда, но просто попробуйте его для этого кода. Это может быть какая-то ошибка двоичной ошибки. Попытка этих вещей может помочь сузить его. – Dijkgraaf