浮点数的一些特殊数值

1.+0 和 -0
阶码全为0尾数全为0,正负由符号位决定

2.+∞和-∞
阶码全为1,尾数全为0,正负由符号位决定

3.非规格化数
阶码全为0,尾数非0
顺带解释,为什么要有非规格化数

大家知道浮点数是有隐藏位“ 1 ”的
然后,浮点数的计算会有1. XXX * 2^n
那怎么表示0呢???

这里就需要有非规格化数了
因为阶码全为0的非规格化数的隐藏位是“ 0 ”,这时就可以处理 0 的问题了!

Ps:阶码为0时,阶码的真值不再是0-127=-127,而是IEEE754规定的-126,承接规格化数的最小阶码真值(1-127=-126)

这里顺带引出所谓的规格化数
也就是
阶码非0,且阶码不全为1
这里看一下规格化数的最小值
根据语法,阶码的最小值为1
1-127=-126
则有最小的规格化数1.0*2^-126
你会发现这个数字要比非规格化数要大
所以说,非规格化数还用于处理比规格化数更小的数值

综上:
非规格化数有两个作用:
1.处理 0 的问题
2.处理比规格化数更小的数值

4.NaN(Not a Number)
阶码全为1,尾数非0
NaN也叫非数,用于定义异常数据
下面我拿C++举一个例子
我拿 0 作了分母

#include<iostream>
using namespace std;
int main()
{
    double a=0;
    double b=0/a;
    cout<<b;
    return 0;
}

输出结果:
在这里插入图片描述
再让我们看看这个非数b 内存中的情况
在这里插入图片描述
转化成二进制
1 11111111 10000000000000000000000
非数定义,阶码全为1,尾数非0

所以,看到非数的时候,就说明你的程序在运算时出现了这样类似的错误哦!
Ps: ind——indeterminate 不确定的
关于输出不是NaN,是不同编译器处理方式略有不同的缘故
上面我用的是VS2012,原因是当初学C的时候就是用的这个,比较熟悉
后来我去Dev跑了同一段程序,然后就输出了非数
(注意:int 型的分母0在编译阶段就报错了,要浮点数而且分母得要是变量)
在这里插入图片描述

顺带给大家看一下我在Java实验的结果
也输出了NaN
在这里插入图片描述
综上:
NaN, 非数,定义异常数据

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值