Java的浮点数

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处。LaplaceDemon/ShiJiaqi。

http://www.cnblogs.com/shijiaqi1066/p/5160771.html 

 

 

Float的表示与定义

IEEE754标准中一个float是32位的数字。

说明:

  • 第0位用s表示。s=1表示负数,s=0表示正数。s即符号位(Sign)。
  • 第[1,7]位用E表示。称为指数。E即指数(Exponent)
  • 第[8,31]位用M表示。称为尾数。M即尾数(Mantissa)

若E全0,则尾数附加位为0。否则尾数附加位为1。

一个Float浮点数的值为:Value = (-1)^s *(1+M)*2^(E-127)

 

例:11000000101000000000000000000000

浮点数值 = -1*2^(129-127)*(2^0+2^-2)

 

对于64位浮点数(Double)来说:

  • 第0位为Sign,即符号位。共1bit。s=1表示负数,s=0表示正数。
  • 第[1-11]位为Exponent,共11bit。
  • 第 [12-63]位为Mantissa,共52bit。

类似的,对于Double有计算公式:V=(-1)^s*(1+M)*2^(E-1023)

 

一张图概括:

 

 

 

浮点数表示的有效数字

float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位

 

最后给出一个很有意思的 bit 与 float 互转的可视化在线工具:http://www.binaryconvert.com/convert_double.html

 

 

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处。LaplaceDemon/ShiJiaqi。

http://www.cnblogs.com/shijiaqi1066/p/5160771.html 

posted @ 2016-01-26 16:14  LaplaceDemon  阅读(1103)  评论(0编辑  收藏  举报