单精度浮点型FLOAT中,为什么指数范围是-126~127,而不是-128~127?
发布网友
发布时间:2022-05-30 07:18
我来回答
共2个回答
热心网友
时间:2023-10-14 11:06
单精度浮点数在机内占4个字节,用32位二进制描述。
双精度浮点数在机内占8个字节,用64位二进制描述。
浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。
数符占1位二进制,表示数的正负。
指数符占1位二进制,表示指数的正负。
尾数表示浮点数有效数字,0.xxxxxxx,但不存开头的0和点
指数存指数的有效数字。
指数占多少位,尾数占多少位,由计算机系统决定。
可能是数符加尾数占24位,指数符加指数占8位 -- float.
数符加尾数占48位,指数符加指数占16位 -- double.
知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是你想知道的数值范围。
对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。
明白了吧,是编译器的保存方式决定了它的表示范围。
热心网友
时间:2023-10-14 11:06
阶码 E = 指数 e + 偏移量。
IEEE754 中规定:
当阶码 E 为全 0,且尾数M 也为全 0 时,表示数值 X = ±0。
当阶码 E 为全 1,且尾数M 也为全 0 时,表示数值 X 为 ±∞。
那么,在其他时,阶码 E,只能取 254 个值:1~254。
但是,指数 e 是八位补码,共有 256 个值:-128~127。
必须抛弃两个 e 值。
偏移量,真不好选:
如果选 128,指数 e 中的-128 就不能用了。
如果选 127,指数 e 中的-128、-127 就都不能用了。
否则,将会出现 E 为全 0 或 E 为全 1。
IEEE 选择了 127。
这就是抛弃了 e 的-128 和-127。
那么, e 的范围,就只有-126 ~ 127 了。
这样选,造成的误差,显然较小。