저는 fortran90 코드가 매우 이상한 문제에 직면하고 있기 때문에 여기에 게시하기로했습니다. 사실, 나는 배정 밀도 변수를 선언하도록 :Fortran 문제 0 + 0이 0이 아닙니다
double precision, dimension(-1:20,-1:20) :: a,b,c
가 그럼 난, 제로로
a(:,:) = 0.d0
b(:,:) = 0.d0
c(:,:) = 0.d0
모든 변수를 초기화 그리고 마지막으로 내가 각을 확인
a(1:17,2:18) = a(1:17,2:18) + b(1:17,2:18) + 0.5d0*c(1:17,2:18)
내 계산이 수행 변수와 이것들은 모두이 계산 전에 0과 같습니다. 그러나 다음을 얻습니다.
abs(maxval(a(1:17,2)) - minval(a(1:17,2))) = 4.336808689942018E-019
이것은 의미가 없지만 어디에서 문제가 발생했는지 전혀 알지 못합니다. 누군가 나를 도와 줄 수 있습니까?
감사
PS : "-O3 -xHost -vec-report0 -implicitnone -warn truncated_source -warn argument_checking -warn되지 않는 -warn 선언 -warn 정렬 -warn ignore_loc : 나는 다음과 같은 옵션이 ifort 사용하고 있습니다 -warn usage -check nobarks -ftz "
가능한 중복 (http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –
또는 : https : //로 유래 .com/questions/21895756/why-are-floating-point-numbers-부정확하다 –
이것을 문제를 보여주는 복사/붙여 넣기 가능한 예제로 변환 할 수 있다면 유용 할 것입니다. 하지만 추론 된 프로그램을 사용하여 복제 할 수는 없습니다. – francescalus