浮点数有效位?
答案:2 悬赏:30
解决时间 2021-02-10 05:18
- 提问者网友:相思瘸子
- 2021-02-10 01:20
浮点数有效位?
最佳答案
- 二级知识专家网友:寂寞的炫耀
- 2021-02-10 02:31
不用说那么多,最后一位可能是四舍五入的(如单精度的第8位,双精度的第17位),有时可能就+1了。
全部回答
- 1楼网友:24K纯糖
- 2021-02-10 03:28
ieee754浮点数的表示方法。c语言里对float类型数据的表示范围为-3.4*10^38~+3.4*10^38。double为-1.7*10^-308~1.7*10^308,long double为-1.2*10^-4932~1.2*10^4932.
类型 比特(位)数 有效数字 数值范围
float 32 6~7 -3.4*10^38~+3.4*10^38
double 64 15~16 -1.7*10^-308~1.7*10^308
long double 128/ 18~19 -1.2*10^-4932~1.2*10^4932
究竟如何计算该范围,分析如下:
对于单精度浮点数(float)来说,符号位一位,指数位8位,尾数23位。指数能够表示的指数范围为-128~127。尾数为23位。
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。float的范围为-2^128 ~ +2^128,也即-3.40e+38 ~ +3.40e+38;double的范围为-2^1024 ~ +2^1024,也即-1.79e+308 ~+1.79e+308。
以float为例,如下表
符号 尾数 指数
1 23 8
数符(+-) 小数部分(决定精度) -127~128 指数(决定范围)
例如:
+1.一个浮点数由三部分组成:符号位S、指数部分E(阶码)以及尾数部分M。
单精度浮点数(float)总共用32位来表示浮点数,其中尾数用23位存储,加上小数点前有一位隐藏的1(IEEE754规约数表示法),2^(23+1) = 16777216。因为 10^7 < 16777216 < 10^8,所以说单精度浮点数的有效位数是7位。考虑到第7位可能的四舍五入问题,所以单精度最少有6位有效数字(最小尺寸)。
同样地:双精度浮点数(double)总共用64位来表示浮点数,其中尾数用52位存储, 2^(52+1) = 9007199254740992,10^16 < 9007199254740992 < 10^17,所以双精度的有效位数是16位。同样四舍五入,最少15位。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯