短视频开发 node.js wavedorm DHCP excel performance cordova templates browser vue响应式布局 传智播客python ps视频教程全集完整版 jquery选择子元素 js获取焦点事件 jquery获取元素宽度 oracle查询所有数据库 录音棚设备一套多少钱 查看mysql是否启动 office配置进度 数据库学习 mysql 导入数据 python中的index python语言 java学习手册 javaswitch语句 java配置 java课程学习 java将数据写入文件 java中map 圣骑士装备 超级煎蛋卷 网络是怎样连接的 渐变事件 maxtoc4d 图解深度学习 电脑基础 陌陌电脑直播设置教程 ip地址转换器 2700U js正则匹配字符串
当前位置: 首页 > 学习教程  > 编程语言

关于浮点数的说明

2020/12/28 19:24:29 文章标签:

关于浮点数的说明浮点数用于表示带小数点的数,实质为有限小数,可用于近似任意实数。浮点数是与定点数相对的概念,定点数是确定小数点位,分别表示整数和小数,如12.375120.37512.375120.37512.375120.375。浮点数的思想是…

关于浮点数的说明


  浮点数用于表示带小数点的数,实质为有限小数,可用于近似任意实数。浮点数是与定点数相对的概念,定点数是确定小数点位,分别表示整数和小数,如 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)SM2E。结合实际存储的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 281},用于表示数量级和确定数的范围。但阶码全为正与实际需求不符(如需要表示 2 − 2 2^{-2} 22),因此人为设定一个偏移量Bias(此处是 − ( 2 7 − 1 ) = − 127 -(2^7-1)=-127 (271)=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×2126]∪[ 1 × 2 − 126 1×2^{-126} 1×2126, 2 × 2 127 2×2^{127} 2×2127),即绝对值范围是[ 2 − 126 2^{-126} 2126, 2 128 2^{128} 2128),其中 2 128 ≅ 3.40 × 1 0 38 2^{128}≅3.40×10^{38} 21283.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} 2126,2126 )间的浮点数表示。补全后有,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=2126×223=21491.40×1045
  • 特殊情况2:exp全1。若小数域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,2126][2126,2128)下,尾数M可精确表示 1 + n × 2 − 23 1+n\times2^{-23} 1+n×223;在邻域 ( − 2 − 126 , 2 − 126 ) (-2^{-126},2^{-126}) (2126,2126)中,尾数M可精确表示 0 + n × 2 − 23 0+n\times2^{-23} 0+n×223。二者均有 n ∈ n\in n{ 0 , 1 , 2 , … , 2 23 − 1 0,1,2,…,2^{23}-1 0,1,2,,2231};
  • 精度和有效数字不同,可以理解为数字变化一个最小单位所能带来的变化量,记浮点数的精度是能准确表达的小数部分的位数,如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 log10223=23×log1026.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+22+23
      ⟹ 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。


本文链接: http://www.dtmao.cc/news_show_550236.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?