【编程】float详解

float类型的表现形式:

默认情况下,赋值运算符右侧的实数被视为 double。 因此,应使用后缀 f 或 F 初始化浮点型变量,如以下示例中所示:

float x = 3.5F;

如果在以上声明中不使用后缀,则会因为您尝试将一个 double值存储到 float 变量中而发生编译错误。

float的取值范围

float占用4个字节,和int是一样,也就是32bit.

1bit(符号位) 8bits(指数位) 23bits(尾数位)

存储方式如下图:

取值范围基本表达法

(浮点)数值 = 尾数 × 底数 ^ 指数,(附加正负号)

float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308

精度

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


(浮点)数值 =      尾数    ×    底数 ^ 指数,(附加正负号)


十进制小数如何转化为二进制数

           算法是乘以2直到没有了小数为止。举个例子,0.9表示成二进制数

                     0.9*2=1.8   取整数部分 1

                     0.8(1.8的小数部分)*2=1.6    取整数部分 1

                     0.6*2=1.2   取整数部分 1

                     0.2*2=0.4   取整数部分 0

                     0.4*2=0.8   取整数部分 0

                     0.8*2=1.6 取整数部分 1

                     0.6*2=1.2   取整数部分 0

                              .........      0.9二进制表示为(从上往下): 1100100100100......

           注意:上面的计算过程循环了,也就是说*2永远不可能消灭小数部分,这样算法将无限下去。很显然,小数的二进制表示有时是不可能精确的 。其实道理很简单,十进制系统中能不能准确表示出1/3呢?同样二进制系统也无法准确表示1/10。这也就解释了为什么浮点型减法出现了"减不尽"的精度丢失问题。


猜你喜欢

转载自blog.csdn.net/chenxuezhi123/article/details/47680185