我有一個場景,我希望編譯器將浮點值向零或向負無窮大取整。它只需要通過編譯器選項來完成,而且我無法找到任何關於此的編譯器選項,因爲類似的方法可用於AIX平臺的xlf編譯器。是否可以使舍入爲零或四捨五入爲無窮大?
有什麼辦法可以在Linux下使用ifort編譯器來做到這一點?
我有一個場景,我希望編譯器將浮點值向零或向負無窮大取整。它只需要通過編譯器選項來完成,而且我無法找到任何關於此的編譯器選項,因爲類似的方法可用於AIX平臺的xlf編譯器。是否可以使舍入爲零或四捨五入爲無窮大?
有什麼辦法可以在Linux下使用ifort編譯器來做到這一點?
英特爾FORTRAN編譯器的浮點選項列表爲here。我沒有看到任何控制舍入模式的選項。
我不知道是否存在負無窮大標誌,但flush to zero標誌-ftz
似乎是您想要的一半。一個簡單的測試如下:
program testftz
implicit none
real :: x
integer :: i
x = 1.0
do i=1,50
print *,i,x
x = x/10.0
enddo
end program testftz
編譯此而不-ftz
給出在丟棄它關閉零之前的第46步驟的1.4012985e-45
小的值。編譯它與-ftz
在第38步給出一個小值9.999999e-38
,然後降到零。
刷新爲零是某些處理器中的一個「特徵」(缺陷),它們將低於正常值的值更改爲零,以補償它們爲了正確處理低於正常值而提供的低劣性能。此功能不會影響不涉及低於正常值的操作中的舍入,並且完全不是問題所要求的。 –