在 Fortran 中故意使用 NaN

Deliberately using NaN in Fortran

我已阅读有关在 Fortran 比较中使用 NaN 的信息性帖子 (here and here) 我想我已经大致了解了正在发生的事情。

我的问题更多是关于 NaN 的一般使用。

假设我有一组实数,但我还不知道它们的值是多少。所以我将它们都设置为 NaN,实际上,我使用 NaN 来部分表示 'unallocated'。似乎有一些 debate 关于这是否是一个好主意,我已经阅读了使用 huge(1.0) 或其他一些 'magic number' 的建议。

但是使用 NaN 似乎有真正的好处,因为任何涉及 any 值为 NaN 的变量的计算都将导致 NaN。这很有帮助(在数学意义上可能 'correct')。

例如,如果 x 设置为 NaN,y 为 1.23,则

z = x + y
z = x - y
z = x * y
z = x / y

总是 导致 z 为 NaN(至少在 Windows 上使用 Intel v18 时如此)——这就是我想要的:z 是未知的,因为 x 是未知。

所以 - 这是 NaN 的可接受用法吗?还是我制造了我还没有意识到的问题?

您可以在许多编译器中使用 -finit-real 等开关自动执行此操作。它可能很有用,这就是他们提供此开关的原因。许多编译器都提供这个。

请注意,NaN 有两种。安静的 NaN 和信号 NaN。使用 he signaling NaN 将触发浮点异常。

它是否优先于不同的标记值几乎只是一种意见,所以我不会回答这个问题,基于意见的问题和民意调查在这里是题外话。在您链接的辩论中,我们真的不能在这里继续 (Is it a good idea to use IEEE754 floating point NaN for values which are not set?)。我不认为在今天的标准中这是一个很好的 SO 问题(注意它有多大了!),而且其中许多答案今天都站不住脚,但如果有人有更多要补充的东西,他们可以在那个问题中做到这一点, 没必要在这里提出来。