C++ 1.#INF00、-1.#IND00和-1.#IND是什么意思?
我在用浮点数处理一些C代码,当我尝试在屏幕上打印浮点数时,得到了1.#INF00,-1.#IND00和-1.#IND。这些价值观意味着什么 我相信1.#INF00表示正无穷大,但是-1.#IND00和-1.#IND呢?我有时也看到这个值:1.$NaN,它不是一个数字,但是是什么导致了这些奇怪的值,这些值如何帮助我进行调试 我用它来表示浮点数 有人能列出所有这些无效值及其含义吗?来自: 本页将回答以下问题C++ 1.#INF00、-1.#IND00和-1.#IND是什么意思?,c++,c,C++,C,我在用浮点数处理一些C代码,当我尝试在屏幕上打印浮点数时,得到了1.#INF00,-1.#IND00和-1.#IND。这些价值观意味着什么 我相信1.#INF00表示正无穷大,但是-1.#IND00和-1.#IND呢?我有时也看到这个值:1.$NaN,它不是一个数字,但是是什么导致了这些奇怪的值,这些值如何帮助我进行调试 我用它来表示浮点数 有人能列出所有这些无效值及其含义吗?来自: 本页将回答以下问题 我的程序刚刚打印出1.#IND或1.#INF(在Windows上)或nan或INF(在Li
- 我的程序刚刚打印出1.#IND或1.#INF(在Windows上)或nan或INF(在Linux上)。发生了什么事
- 我如何判断一个数是否真的是一个数,而不是一个NaN或一个无穷大
- 我怎样才能在运行时找到有关各种“南”和“无限”的更多细节
- 您是否有任何示例代码来说明这是如何工作的
- 我在哪里可以学到更多
对于那些在.NET环境中的人来说,以下是过滤非数字的简便方法(此示例在VB.NET中,但在C#中可能类似):
如果是Double.IsNaN(MyVariableName),那么
MyVariableName=0'或您想在此处执行的任何操作来“纠正”这种情况
如果结束
如果尝试使用具有NaN值的变量,将出现以下错误:
值对于小数来说太大或太小
上面已经回答了您的问题“它们是什么”
至于调试(您的第二个问题),在开发要检查特殊输入值的库时,您可能会发现以下函数在Windows C++中很有用:
_isnan()、_isfinite()和_fpclass()等
在Linux/Unix上,您应该会发现isnan()、isfinite()、isnormal()、isinf()、FpClassification()非常有用(并且您可能需要使用编译器标志-lm链接libm)。对于任何想知道
-1.#IND00
和-1.#IND
之间区别的人来说(问题特别提出了这个问题,但没有答案):
-1.#IND00
这特别意味着非零数字除以零,例如3.14/0
()
-1.#IND
(NaN的同义词)
这意味着四件事之一(请参见):
1) 负数的sqrt
或log
2) 两个变量均为0或无穷大的操作,例如0/0
3) 至少一个变量已经是NaN
的操作,例如NaN*5
< p>4)超出范围TRIG,例如“代码> ARCISN(2)< /P> >我知道OP并没有真正要求这个,但是作为一个方便的测试,<代码> MyFoals= MyFooS/<代码>如果你有这些魔法值,它将返回false。@ TcPN实际上是C++,+无穷大== +无穷大。尝试检查1.0/0.0:
1.#INF00
=1.#INF00
返回true,-1.#INF00
=-1.#INF00
返回true,但1.#INF00
=-1.#INF00
为false。不确定其他配置,但在Windows 7/Visual studio 2010上。浮点数nan=sqrtf(-1.0f);nan==nan;//计算结果为真。。。与滕普所说的相反。。(Yevgen V的评论)如果你能使用C++11,看看等等。如果你能使用Boost,你就是@Jeff,这可能与优化有关。请参阅。这不会检测到1.#INF
。您还需要使用Double.IsInfinity(MyVariableName)
检查+/-无穷大。这是Microsoft C运行时库格式化无穷大和NaN浮点值的方式。MinGW没有自己的CRT,它使用操作系统提供的msvcrt.dll。它的确切外观取决于您使用的printf()格式说明符,因此额外的零甚至可以。C99标准设定了VS2015中采用的预期输出,因此