내가 알고있는 증식하는 적절한 방법 또는 내가실수로 멀티플렉싱 할 때 언더 플로가 발생하지 않도록하려면 어떻게해야합니까? <code>underflow</code> 옵션이 아니라고
gfortran -ffpe-trap=invalid,zero,overflow,underflow ...
처럼 내 포트란 코드를 컴파일 할 때 언더 플로우 에러를하지 않고 함께 광장 플로트 (또는 더블) 번호가 있는지 알고 싶습니다 항상 좋은 생각이지만이 옵션으로 곱셈을 할 수 있는지 궁금합니다. 사실, 다음 예제에서 나는 언더 플로우가 발생할 수 있지만 어쩌면 나는 코드에있는 다른 사례를 알지 못한다는 것을 안다. 이것이 가능한 경우이 옵션을 유지하려는 이유입니다.
다음은 행렬의 x, y 인덱스마다 벡터 u를 계산하는 예입니다. 이 벡터를 구성하는 2 개의 값은 0과 1 사이에 있습니다. 그리고 나는 그 표준의 제곱을 계산합니다.
매우 논리적이므로이 사각형 연산 때문에 값이 언더 플로우됩니다. 이후,이 아주 작은 값은 제로라고 생각할 수 있습니다. if
비교를 사용하는 것보다 underflow
이 더 좋은 방법이 아닌가요?
implicit none
double :: u(100,100,2), uSqr(100,100)
integer :: x,y
DO x= 1, 100
DO y = 1, 100
CALL Poisin(u(x,y,:), x, y)
ENDDO
ENDDO
uSqr = u(:,:,1)*u(:,:,1) + u(:,:,2) * u(:,:,2) ! where comes the underflow errors
언더 플로가 발생하지 않도록 하시겠습니까? 아니면 언더 플로우가 오류 상태가되는 것을 방지 하시겠습니까? – francescalus
파일 단위로'-ffpe-trap' 옵션을 설정할 수 없습니까? 그렇다면 위의 인용 부분을 하나의 소스 파일로 분리하고'-ffpe-trap' 목록에서'underflow'를 생략하여 다른 소스 파일에 대한 원래 예외 트랩 목록을 유지하면서이 파일을 컴파일 할 수 있습니다. 나는 당신이'uSqr' 값의 언더 플로우에도 불구하고 그것들을 0으로 간주 함으로서 프로그램이 계속 진행되도록하고 싶다고 가정합니다. – norio
두 번째 @ francescalus의 덧글이 있어야합니다. 계산을 유지하면서 오류없이 종료하겠습니까?왜 당신은'언더 플로'를 걸고 싶습니까? '언더 플로우'를 포착하지 않는 것이 진지한 생각이다. 내 의견으로는 그것은 꽤 쓸모 없거나 해롭다. –