浮点数的原理
浮点数
-
为啥叫浮点数,而不是叫小数,或者可以说浮点数和小数的区别?
- 因为资源的限制,数学中的有些小数无法直接在计算机中准确的表示,所以出现了浮点数,这是对小数的近似值,浮点数永远小于小数;
- 因为浮点数,仅仅是小数的近似值,所以我们在计算的时候经常出现问题,最完美的解决方案就是选择更加精确的数据类型;
- 可以举一个例子,二进制的小数基数可以用 0.5 0.25 0.125 0.0625 …来表示,要想用这些数据来表示这所有的小数 那是不可能的,例如 0.3 0.1 0.2 就没法准确的表示 ,所以仅仅是近似值; 这里你可以比喻 10 进制存在无限不循环小数 也是无法用 十进制的准确的数来表示;
-
IEEE754 定义的规则
- 要求二进制小数必须是1开头,那么F尾就会多一位的范围,float就是24位,double就是53位;更加精确了;
-
浮点型的组成(下面的图片是10进制案例)
-
符号:(-1)^S
-
尾部:IEEE754要求二进制的第一位必须是1,也就是 1.F
-
基数:这里基数是2 也就是说是2进制的 在IEEE754中基数是省略的 因为都是2;
-
指数:因为指数肯定有负数也有正数,所以会减去1023 中间数来做判断符号正负,大于1023就是正数,小于1023就是负数;
-
浮点型 主要分为 也就是单精度float和双精度 double 分别是4个字节和8个字节
所以浮点型的精度由 尾部来决定
double 52位 尾部长度 2^53 大于这个数都会失真;
float 尾部是24位 2^24 大于这个数也会失真;
oat 尾部是24位 2^24 大于这个数也会失真;
那么 科学计数法表示为:(-1)^S * 1.F* 2^(E - 1023)