【问题标题】:Neglecting NaN terms in a summation in Fortran在 Fortran 的求和中忽略 NaN 项
【发布时间】:2018-02-13 18:22:48
【问题描述】:

有没有一种方法可以将NaN 和普通数字以不同于通常在 Fortran 中完成的方式组合在一起?

我有几个包含“安全”术语的汇总,不能是NaN,还有一些其他术语可以是NaN。 我希望表达式的评估忽略加数,以防它们是NaN

当它们为NaN 时,我不能只是将它们乘以一个空因子,因为NaN x 0 无论如何都会给出NaN。 想法?

谢谢

【问题讨论】:

    标签: fortran nan


    【解决方案1】:

    没有不传播NaN 的算术运算。所以像乘以 0 这样的想法是行不通的。

    您唯一的解决方案是忽略总和中的 NaN 项。使用基于

    的东西来做到这一点
    IF (IEEE_IS_NAN(x)) 
    

    如果您不使用 IEEE754 或使用较旧的 FORTRAN 标准,则可以使用

    IF(x .NE. x)

    当且仅当 x 为 NaN 时为真。

    【讨论】:

    • isnan 不是标准的 Fortran 内在函数。最好用ieee_is_nan,见software.intel.com/en-us/node/692942
    • 另外,某些编译器选项会优化掉x .ne. x,所以要小心。始终为每个系统测试您的 NaN 检测器。
    • @IanBush:确实;我已经有一段时间没有使用 FORTRAN,但在遥远的过去,我确实使用过 IF(x .NE. x)
    • 没问题 - 它表明,它已经正式成为 Fortran(小写)超过 25 年了
    • ieee_is_nan 即使没有设置为 ieee_arithmetic 推荐的选项也可能工作(但这部分是由于内在阻止 simd 优化)。通常,避免省略 x /= x 的选项也会阻止优化总和。
    猜你喜欢
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 2017-01-11
    • 2018-06-22
    • 2023-02-18
    • 2011-09-24
    • 2017-11-24
    相关资源
    最近更新 更多