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的选项也会阻止求和优化。