判断nan - float inf c++




1.#INF00,-1。#IND00和-1。#IND是什么意思? (2)

对于那些在.NET环境中的人来说,以下可以是一种方便的过滤非数字的方法(这个例子在VB.NET中,但在C#中可能类似):

If Double.IsNaN(MyVariableName) Then
    MyVariableName = 0 ' Or whatever you want to do here to "correct" the situation
End If

如果您尝试使用具有NaN值的变量,您将收到以下错误:

对于十进制,值太大或太小。

我正在使用浮点数搞乱一些C代码,我得到1.#INF00,-1。#IND00和-1。#IND当我尝试在屏幕上打印浮点数时。 这些价值观意味着什么?

我相信1.#INF00表示正无穷大,但是-1。#IND00和-1。#IND? 我有时也看到了这个值:1。$ NaN这不是一个数字,但是导致这些奇怪值的原因是什么能帮助我进行调试?

我正在使用MinGW ,我相信它使用IEEE 754表示浮点数。

有人可以列出所有这些无效值及其含义吗?


您的问题“它们是什么”已在上面得到解答。

至于调试(第二个问题),在开发想要检查特殊输入值的库中,您可能会发现以下在Windows C ++中有用的函数:

_isnan(),_ isfinite()和_fpclass()

在Linux / Unix上你应该找到isnan(),isfinite(),isnormal(),isinf(),fpclassify()很有用(你可能需要使用编译器标志-lm来链接libm)。





c