C++的nan、inf

( 2022-09-30 00:28:51 编辑完的,雪藏了很久,今天有时间了,把浮点数除法搜来补上)

上周地图经纬度出的bug搞得我精疲力竭,总是莫名其妙的就点就飞到不知道哪里去了。qt版本又旧没有isNan函数,愣是找了2天多。最后发现是double数据传递给float出问题了。

软件搭架子的工作多了,数值计算这里的经验都空白了,索性记录一下。

〇、int型就不会出现这些,直接崩溃……

除零中断:

一、nan

一般出现这个代表非法浮点运算

nan: not a number,表示“无效数字”。

如果表达式中含有nan,那么表达式的结果为nan

二、INF

一般出现这个代表结果溢出

INF:infinite,表示“无穷大”。

超出浮点数的表示范围(溢出,即阶码部分超过其能表示的最大值)。

+inf大于任何数(除了它自己和nan),-inf小于任何数(除了它自己和nan),得到inf时就查看是否有溢出或者除以0。inf在C语言表达式中就表示数学里无限的概念,如1.0/inf等于0.0,并可以与其他浮点数进行比较的(可以参与<=、>+、==、!=等运算)。

三、Qt中识别nan和inf的函数

这里为了跨平台,我只介绍qt的函数

    int isfinite(x) ,判断x是否有限,是返回1,其它返回0;
    int isnormal(x),判断x是否为一个数(非inf或nan),是返回1,其它返回0;
    int isnan(x),当x时nan返回1,其它返回0;
    int isinf(x) ,当x是正无穷是返回1,当x是负无穷时返回-1,其它返回0。有些编译器不区分。
 

四、浮点表示,解析以上原因

这里有一篇我之前写的博客内容详细数字类型的输出: 

c语言输出0.000000或乱码,深究_超自然祈祷的博客-CSDN博客_c语言输出为0.0000

计算机组成原理的浮点表示:

浮点除法:

  • 除数为0,被除数不为0: 结果为无穷大。在IEEE 754标准下就是阶码全为1,尾数全为0。
  • 除数被除数都为0:结果是NAN(not a number)。在IEEE 754标准下阶码全为1,尾数非0。

(——以下截图在慕课截取的)

1.运算步骤:

1-阶码运算

2-尾数运算

3-尾数规格化

4-舍入

5-溢出判断

2.浮点除法运算规则

3.浮点乘法运算举例(除法类似)

浮点除法这玩意好像很复杂,随便找找的都是略过……

部分参考:

C、C++中出现nan、inf原因_LaugustusJ的博客-CSDN博客_c++ inf

 C语言中的nan和inf 的判断和使用_大作家佚名的博客-CSDN博客_c nan

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超自然祈祷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值