【发布时间】:2012-09-25 05:42:08
【问题描述】:
我知道 if(value==value) 可以解决问题,但在我的应用程序中,我需要检查 50 多个变量,并且检查每个变量有点乏味并且可能效率低下。理想情况下,我正在寻找的是在子程序结束之前我可以调用一个函数(如果存在这样的函数),它将返回 1 或 0。我有一种感觉,因为在汇编中存在这样一个可以检查全局浮动的函数点状态寄存器。 如果不是这种情况,那么有没有比轮询每个浮点变量的 value==value 更好的方法?
【问题讨论】:
-
你怎么能在 C 中得到 NaN 呢?
-
@Eregrith:
sqrt(-1)、log(-1)、0. / 0等 -
您想知道其中 any 是否是 NaN?如果是这样,也许
isnan(var1 + var2 + var3 + ...)。但不要相信我的话,首先检查它是否会产生误报,如果会,它们对你是否重要。例如可能+INF + -INF是NaN,我不记得了。顺便说一句,这里真正的问题是您要检查 50 个变量——通常您会使用多个值执行一些计算,并且只关心 result 是否为 NaN。安静 NaN 的意义在于它可以传播。有些人甚至会说任何一个函数中的 50 个变量都是错误的。 -
我知道,但我正在更新一些外部供应商的固件,所以我对此无能为力,但求和是个好主意;我会看看情况如何。
-
其实
isnan是C语言中的一个宏,不是吗?因此,如果这对您来说还不是很明显:我写的确切表达式不好,它可能会计算两次总和。
标签: c gcc floating-point nan