Fortran求和中忽略NaN项
有没有一种方法可以将Fortran求和中忽略NaN项,fortran,nan,Fortran,Nan,有没有一种方法可以将NaN和普通数字以一种不同的方式组合在一起,而这种方式通常是用Fortran语言实现的 我有几个包含“安全”术语的总和,不能是NaN,还有一些其他术语可以是NaN。 我希望表达式的计算忽略加法,以防它们是NaN 当它们是NaN时,我不能简单地将它们乘以一个空因子,因为nanx0给出了NaN。 想法 谢谢没有不传播NaN的算术运算。所以,像乘以0这样的想法是行不通的 唯一的解决办法是在总和中漏掉NaN项。用基于 IF (IEEE_IS_NAN(x)) 如果您没有使用IEEE
NaN
和普通数字以一种不同的方式组合在一起,而这种方式通常是用Fortran语言实现的
我有几个包含“安全”术语的总和,不能是NaN
,还有一些其他术语可以是NaN
。
我希望表达式的计算忽略加法,以防它们是NaN
当它们是NaN
时,我不能简单地将它们乘以一个空因子,因为nanx0
给出了NaN
。
想法
谢谢没有不传播NaN的算术运算。所以,像乘以0这样的想法是行不通的 唯一的解决办法是在总和中漏掉
NaN
项。用基于
IF (IEEE_IS_NAN(x))
如果您没有使用IEEE754或使用较旧的FORTRAN标准,则可以使用
IF(x.NE.x)
当且仅当x为NaN时,这一点才成立。isnan不是标准的Fortran内部函数。最好使用ieee_is_nan,另请参见,某些编译器选项将优化
x.ne。x
,所以要小心。总是为每个系统测试NaN探测器。@IanBush:的确;我已经有一段时间没有使用FORTRAN了,但在遥远的过去,我确实使用了IF(x.NE.x)
。没问题——这表明,它已经正式使用FORTRAN(小写)超过25年了,即使没有为ieee\u算术设置推荐的选项,ieee\u仍然可以工作(但这在一定程度上是由于防止simd优化的内在原因)。通常,避免省略x/=x的选项也会阻止求和优化。