单精度的浮点数有效数字为什么是七位?

单精度的浮点数有效数字为什么是七位?如何计算?为什么?谢谢啦... 单精度的浮点数有效数字为什么是七位?如何计算?为什么?谢谢啦 展开
 我来答
教育小百科达人
推荐于2019-09-18 · TA获得超过156万个赞
知道大有可为答主
回答量:8828
采纳率:99%
帮助的人:475万
展开全部

单精度数的尾数用23位存储,加上默认的小数点前的1位1,2^(23+1) = 16777216。

因为 10^7 < 16777216 < 10^8,所以说单精度浮点数的有效位数是7位。 

双精度的尾数用52位存储,2^(52+1) = 9007199254740992,

因为10^16 < 9007199254740992 < 10^17,所以双精度的有效位数是16位。

扩展资料:

“浮点数的精度取决于尾数部分。尾数部分的位数越多,能够表示的有效数字越多。”这句赞同,所以双精度的有效位数肯定比单精度的多。

一个数如果有效位数大于7位 如1.27893456076(12位),用float来表示就不能准确的存储了。

运行:

float a = 1.23456789076f;// --->a = 1.2345679

即用1.23456789076在计算机中存储成float的格式只能逼近到第七位,

能不能准确存储还取决于这个数字(十进制数)能不能用有限的二进制位数准确的表示。 float = 2.202  float = 2.25

如果小数部分转化为二进制时候得到一个无穷值,则会根据尾数部门的长度舍弃多余的部分,从而存储一个近似的浮点值,这就解释了 为什么在比较浮点数值时候 要做一个区间比较 而不是 等值比较。

溢出处理

浮点数的溢出是以其阶码溢出表现出来的。在加\减运算过程中要检查是否产生了溢出:若阶码正常,加(减)运算正常结束;若阶码溢出,则要进行相应处理。另外对尾数的溢出也需要处理。

阶码上溢 超过了阶码可能表示的最大值的正指数值,一般将其认为是+∞和-∞。

阶码下溢 超过了阶码可能表示的最小值的负指数值,一般将其认为是0。

尾数上溢 两个同符号尾数相加产生了最高位向上的进位,将尾数右移,阶码增1来重新对齐。

尾数下溢 在将尾数右移时,尾数的最低有效位从尾数域右端流出,要进行舍入处理。

参考资料:百度百科——浮点数

北京埃德思远电气技术咨询有限公司
2023-08-25 广告
整定计算的工作步骤,大致如下:1.确定整定方案所适应的系统情况。2.与调度部门共同确定系统的各种运行方式。3.取得必要的参数与资料(保护图纸,设备参数等)。4.结合系统情况,确定整定计算的具体原则。5.进行短路计算。6.进行保护的整定计算及... 点击进入详情页
本回答由北京埃德思远电气技术咨询有限公司提供
昊涙学姐
高粉答主

推荐于2019-08-17 · 说的都是干货,快来关注
知道答主
回答量:416
采纳率:61%
帮助的人:14.5万
展开全部

单精度数的尾数用23位存储,加上默认的小数点前的1位1,2^(23+1) = 16777216。

因为 10^7 < 16777216 < 10^8,所以说单精度浮点数的有效位数是7位。 

双精度的尾数用52位存储,2^(52+1) = 9007199254740992,

因为10^16 < 9007199254740992 < 10^17,所以双精度的有效位数是16位。

拓展资料:

浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法。

参考资料:百度百科_浮点数

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luffylli
推荐于2017-09-03 · TA获得超过766个赞
知道小有建树答主
回答量:328
采纳率:0%
帮助的人:322万
展开全部
浮点数7位有效数字。
双精度数16位有效数字。

浮点数取值范围:
负数取值范围为 -3.4028235E+38 到 -1.401298E-45,正数取值范围为 1.401298E-45 到 3.4028235E+38。

双精度数取值范围:
负值取值范围-1.79769313486231570E+308 到 -4.94065645841246544E-324,正值取值范围为 4.94065645841246544E-324 到 1.79769313486231570E+308。

C/C++中浮点数的表示遵循IEEE 754标准。
一个浮点数由三部分组成:符号位S、指数部分E(阶码)以及尾数部分M(如下)。
Floating
S--------E-------M
1位-----8位-----23位

Double
S--------E-------M
1位-----11位----52位

十进制数的换算计算公式为(n^m表示n的m次幂,B表示前面的数字是二进制):

S * 2^(E-127) * (1.M)B

浮点数的精度取决于尾数部分。尾数部分的位数越多,能够表示的有效数字越多。

单精度数的尾数用23位存储,加上默认的小数点前的1位1,2^(23+1) = 16777216。因为 10^7 < 16777216 < 10^8,所以说单精度浮点数的有效位数是7位。

双精度的尾数用52位存储,2^(52+1) = 9007199254740992,10^16 < 9007199254740992 < 10^17,所以双精度的有效位数是16位。

另外:
如果你在PI值的有效位后增加数字的话,结果是不会变化的,由于PI值是以常数方式赋值,可以在常数后面加个'f',如PI = 3.1415926f;否则编译器会先把常数当作double类型,然后再截断后面的值变为浮点值,这样的话,就有可能PI的值会有不同,造成你看到的现象。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友459279f
2017-10-25
知道答主
回答量:3
采纳率:0%
帮助的人:3527
引用luffylli的回答:
浮点数7位有效数字。
双精度数16位有效数字。

浮点数取值范围:
负数取值范围为 -3.4028235E+38 到 -1.401298E-45,正数取值范围为 1.401298E-45 到 3.4028235E+38。

双精度数取值范围:
负值取值范围-1.79769313486231570E+308 到 -4.94065645841246544E-324,正值取值范围为 4.94065645841246544E-324 到 1.79769313486231570E+308。

C/C++中浮点数的表示遵循IEEE 754标准。
一个浮点数由三部分组成:符号位S、指数部分E(阶码)以及尾数部分M(如下)。
Floating
S--------E-------M
1位-----8位-----23位

Double
S--------E-------M
1位-----11位----52位

十进制数的换算计算公式为(n^m表示n的m次幂,B表示前面的数字是二进制):

S * 2^(E-127) * (1.M)B

浮点数的精度取决于尾数部分。尾数部分的位数越多,能够表示的有效数字越多。

单精度数的尾数用23位存储,加上默认的小数点前的1位1,2^(23+1) = 16777216。因为 10^7 < 16777216 < 10^8,所以说单精度浮点数的有效位数是7位。

双精度的尾数用52位存储,2^(52+1) = 9007199254740992,10^16 < 9007199254740992 < 10^17,所以双精度的有效位数是16位。

另外:
如果你在PI值的有效位后增加数字的话,结果是不会变化的,由于PI值是以常数方式赋值,可以在常数后面加个'f',如PI = 3.1415926f;否则编译器会先把常数当作double类型,然后再截断后面的值变为浮点值,这样的话,就有可能PI的值会有不同,造成你看到的现象。
展开全部
10^16 < 9007199254740992 这错了吧!!!
10^15 < 9007199254740992<10^16
双精度的有效位数是保证15位,部分数据可以取到16位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1d4d715e1
2010-09-07
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
一个浮点数由三部分组成:符号位S、指数部分E(阶码)以及尾数部分M: Floating
S--------E-------M
1位-----8位-----23位

浮点数的精度取决于尾数部分。尾数部分的位数越多,能够表示的有效数字越多。

单精度数的尾数用23位存储,加上默认的小数点前的1位1,2^(23+1) = 16777216。因为 10^7 < 16777216 < 10^8,所以说单精度浮点数的有效位数是7位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式