标签:10 23 浮点数 说明 关于 126 127 128
关于浮点数的说明
浮点数用于表示带小数点的数,实质为有限小数,可用于近似任意实数。浮点数是与定点数相对的概念,定点数是确定小数点位,分别表示整数和小数,如 12.375 = 12 + 0.375 12.375=12+0.375 12.375=12+0.375。浮点数的思想是用科学计数法,如 12.375 = 1.2375 × 1 0 1 12.375=1.2375×10^1 12.375=1.2375×101,不过底数要求为2,进制取二进制,即 V = ( − 1 ) S ⋅ M ⋅ 2 E V=(-1)^S·M·2^E V=(−1)S⋅M⋅2E。结合实际存储的SEM顺序,记作 V = ( − 1 ) S 2 E M V=(-1)^S2^EM V=(−1)S2EM。(Value,Sign,Exponent,Mantissa)
以float为例。单精度浮点数float占4个Byte,即32位比特/bit,具体由1位符号位S(0表正1表负)、8位阶码位exp(实际应用时的指数E还需考虑一个偏移量,E=exp+Bias)、23位尾数位M(尾数用于确定精度,是二进制小数)共同组成。根据前面的科学技术原理,结合浮点数的SEM表示方法,有:
- 符号为“ + + +”则S=0,符号为“ − - −”则S=1;
- float中exp有8位,即可表示{0,1,…, 2 8 − 1 2^8-1 28−1},用于表示数量级和确定数的范围。但阶码全为正与实际需求不符(如需要表示 2 − 2 2^{-2} 2−2),因此人为设定一个偏移量Bias(此处是 − ( 2 7 − 1 ) = − 127 -(2^7-1)=-127 −(27−1)=−127),使表示范围基本向负轴偏移一半,即{ 0 , 1 , … , 255 0,1,…,255 0,1,…,255}映射至{ − 127 , − 126 , … , 0 , 1 , … , 128 -127,-126,…,0,1,…,128 −127,−126,…,0,1,…,128}, E = ( e x p + B i a s ) 2 E=(exp+Bias)_2 E=(exp+Bias)2,这里 ( n ) 2 (n)_2 (n)2表示二进制表示的数;
- 但在实际应用中,阶码exp全为0和1认为是特殊情况,单独赋予特别的性能(数0包含在阶码E全为0的情况之中),因此常规情况下的阶码是由{ 1 , … , 254 1,…,254 1,…,254}对应的{ − 126 , … , 127 -126,…,127 −126,…,127};
- 注意到常规情况下是非零二进制数的科学计数表示,那么尾数M一定为 1. a b c … 1.abc… 1.abc…的形式(且a,b,c,…=0或1),因此只需用M来记录小数 ( a b c … ) 2 (abc…)_2 (abc…)2的部分(简记为fraction,frac),第一位的1不储存,M=1+frac,可以看到常规情况下1≤M<2;
- 因此,常规情况的可表示范围为( − 2 × 2 127 -2×2^{127} −2×2127, − 1 × 2 − 126 -1×2^{-126} −1×2−126]∪[ 1 × 2 − 126 1×2^{-126} 1×2−126, 2 × 2 127 2×2^{127} 2×2127),即绝对值范围是[ 2 − 126 2^{-126} 2−126, 2 128 2^{128} 2128),其中 2 128 ≅ 3.40 × 1 0 38 2^{128}≅3.40×10^{38} 2128≅3.40×1038;
- 特别注意,表示范围不是真的连续区间,而是该区间内的离散点,越靠近0越密集,越远离越稀疏;
- 特殊情况1:exp全0。此时更改计算标准,规定此时 E = ( 1 + B i a s ) 2 E=(1+Bias)_2 E=(1+Bias)2, M = f r a c M=frac M=frac,即此时0≤M<1。所以可以补全单精度浮点数范围在( − 2 − 126 , 2 − 126 -2^{-126},2^{-126} −2−126,2−126 )间的浮点数表示。补全后有,float表示范围是 ( − 2 128 , 2 128 ) (-2^{128},2^{128}) (−2128,2128);
- E和M全为0即可表示0。除去0以外,最小的数应该是 V = ( − 1 ) S 2 E M = 2 − 126 × 2 − 23 = 2 − 149 ≅ 1.40 × 1 0 − 45 V=(-1)^S2^EM=2^{-126}×2^{-23}=2^{-149}≅1.40×10^{-45} V=(−1)S2EM=2−126×2−23=2−149≅1.40×10−45;
- 特殊情况2:exp全1。若M的小数部分frac全为0,则用来表示± ∞ ∞ ∞,在计算机中可以表示溢出的结果,例如两个非常大的数相乘;当frac不全为0,则该数记为NaN(Not a Number),它在计算机中可以表示非法的数,例如计算√(-1)时的值;
- 尽管单精度浮点数可表示范围在 ( − 2 128 , 2 128 ) (-2^{128},2^{128}) (−2128,2128)间的数。但除需考虑范围外,还需要考虑精度问题,比如数123456789.10虽然在单精度浮点数范围,但11位有效数字实际上无法用float准确表示。阶码位E决定了可表示的数的大小范围,尾数位决定了精度(小数点后的位数);
- 在常规范围 ( − 2 128 , − 2 − 126 ] ∪ [ 2 − 126 , 2 128 ) (-2^{128},-2^{-126} ]∪[2^{-126},2^{128}) (−2128,−2−126]∪[2−126,2128)下,尾数M可精确表示 1 + n × 2 − 23 1+n\times2^{-23} 1+n×2−23;在邻域 ( − 2 − 126 , 2 − 126 ) (-2^{-126},2^{-126}) (−2−126,2−126)中,尾数M可精确表示 0 + n × 2 − 23 0+n\times2^{-23} 0+n×2−23。二者均有 n ∈ n\in n∈{ 0 , 1 , 2 , … , 2 23 − 1 0,1,2,…,2^{23}-1 0,1,2,…,223−1};
- 精度和有效数字不同,可以理解为数字变化一个最小单位所能带来的变化量,记浮点数的精度是能准确表达的小数部分的位数,如12.34,精度是0.01或2,有效位数是4;
- 又 2 23 = 8388608 2^{23}=8388608 223=8388608,所以单精度浮点数在二进制下的精度为23位,尾数(不管是常规还是邻域范围)在十进制数的精度(小数点后的尾数)至少为6位,一般为7位。准确来说,是 − l o g 10 2 − 23 = 23 × l o g 10 2 ≈ 6.92 -\mathrm{log}_{10}2^{-23}=23\times\mathrm{log}_{10}2 \approx6.92 −log102−23=23×log102≈6.92位;同理双精度15~16位有效数字。
例:
12.375
=
12
+
0.375
=
2
3
+
2
2
+
2
−
2
+
2
−
3
12.375=12+0.375=2^3+2^2+2^{-2}+2^{-3}
12.375=12+0.375=23+22+2−2+2−3
⟹
12.37
5
10
=
1100.01
1
2
=
+
2
3
×
1.10001
1
2
12.375_{10}=1100.011_2=+2^3×1.1000 11_2
12.37510=1100.0112=+23×1.1000112
所以单精度浮点数中,S=0;E=3; exp=
(
3
+
127
)
10
=
(
2
7
+
2
1
)
10
=
1000001
0
2
(3+127)_{10}=(2^7+2^1 )_{10}=1000 0010_2
(3+127)10=(27+21)10=100000102;M=1000 1100 0000 0000 0000 000,即储存为0⋮10000010⋮10001100000000000000000。
标签:10,23,浮点数,说明,关于,126,127,128 来源: https://blog.csdn.net/Coffee_M/article/details/111840419
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。