c语言 inf00错误,1.#INF00,-1.#IND00和-1.#IND是什么意思?

本页面将回答以下问题.

我的程序只打印出1.#IND或1.#INF(在Windows上)或nan或inf(在Linux上).发生了什么?

如何判断数字是否真的是数字而不是NaN或无穷大?

如何在运行时找到有关NaN和无穷大的更多细节?

你有任何示例代码来说明这是如何工作的吗?

我在哪里可以了解更多?

这些问题与浮点异常有关.如果你得到一些奇怪的非数字输出,你期望一个数字,你要么超过浮点运算的有限限制,要么你已经要求一些未定义的结果.为了简单起见,我将坚持使用双浮点类型.类似的评论适用于浮点类型.

调试1.#IND,1.#INF,nan和inf

如果您的操作生成的正数大于可以存储在double中的正数,则操作将在Windows上返回1.#INF或在Linux上返回inf.类似地,如果结果是负数太大而无法存储在double中,则代码将返回-1.#INF或-inf.将正数除以零会产生正无穷大,将负数除以零会产生负无穷大.本页末尾的示例代码将演示一些产生无穷大的操作.

有些操作没有数学意义,例如取负数的平方根.(是的,这个操作在复数的上下文中是有意义的,但是double表示实数,因此没有双重来表示结果.)对于负数的对数也是如此.sqrt(-1.0)和log(-1.0)都将返回NaN,这是"数字"的通用术语,即"非数字".Windows将NaN显示为-1.#IND("IND"表示"indeterminate"),而Linux显示为nan.返回NaN的其他操作包括0/0,0*∞和∞/∞.有关示例,请参阅下面的示例代码.

简而言之,如果你得到1.#INF或inf,寻找溢出或除零.如果你得到1.#IND或nan,请查找非法操作.也许你只是有一个bug.如果它更精细并且您有一些难以计算的东西,请参阅避免溢出,下溢和精度损失.该文章为计算结果提供了技巧,如果直接计算,则会产生中间步骤溢出.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值