【问题标题】:Is it possible to enable rounding to zero or rounding to minus infinity in ifort?是否可以在 ifort 中启用舍入为零或舍入到负无穷大?
【发布时间】:2015-01-30 16:00:41
【问题描述】:

我有一个场景,我希望编译器将浮点值舍入为零或负无穷大。它只需要通过编译器选项来完成,我无法找到任何与此相关的编译器选项,因为类似的方法可用于 AIX 平台的 xlf 编译器。

有没有办法在 Linux 中使用 ifort 编译器做到这一点?

【问题讨论】:

    标签: linux floating-point fortran rounding intel-fortran


    【解决方案1】:

    英特尔 FORTRAN 编译器的浮点选项在here 中列出。我没有看到任何控制舍入模式的选项。

    【讨论】:

      【解决方案2】:

      我不知道是否存在负无穷大标志,但 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 值,然后下降到零。

      【讨论】:

      • 刷新为零是某些处理器的“特性”(缺陷),它们将次正常值更改为零,以弥补它们为正确处理次正常值而提供的较差性能。此功能不会影响不涉及次正规值的运算中的舍入,这根本不是问题所要求的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多