1、Float 数据类型格式
byte | Byte1 | B1 | B2 | B3 | |||||||||||||||||||||||||||||
bit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
占用 | 符号位 | exp指数位 |
有效数字位 |
2^(-n)次方对应小数值分析:
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | |||||||||||||||||||||||||
小数值 | 0.5 | 0.25 | 0.125 | 0.0625 | 0.03125 | 0.015625 | 0.0078125 | 0.00390625 | 0.001953125 | 0.0009765625 | 0.0004882813 | 0.0002441406 | 0.0001220703 | 6.103515625E-05 | 3.0517578125E-05 | 1.52587890625E-05 | 7.62939453125E-06 | 3.814697265625E-06 | 1.9073486328125E-06 | 9.5367431640625E-07 | 4.76837158203125E-07 | 2.38418579101562E-07 | 1.19209289550781E-07 | |||||||||||||||||||||||||
总和 | 0.9999998808 |
由于2^(-23)的值为 1.19209289550781E-07 此为二进制小数的十进制表示时的最小进度,因此Float 数据类型的最最大有效数位为7位,7位时数据已经不是很精确!
因此 Float类型的有效数字数值处于6-7个有效位之间 不同编译器处理不一样。有些编译器按照7位有效数字,有些按照6为有效数字
2、Double数据类型格式
byte | B1 | B1 | B2 | B3 | B4 | B5 | B6 | B7 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | |
占用 | 符号位 | exp指数位 11位 | 有效数字位 52位 |
2^(-n)次方对应小数值分析:
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
小数值 | 0.5 | 0.25 | 0.125 | 0.0625 | 0.03125 | 0.015625 | 0.0078125 | 0.00390625 | 0.001953125 | 0.0009765625 | 0.0004882813 | 0.0002441406 | 0.0001220703 | 6.103515625E-05 | 3.0517578125E-05 | 1.52587890625E-05 | 7.62939453125E-06 | 3.814697265625E-06 | 1.9073486328125E-06 | 9.5367431640625E-07 | 4.76837158203125E-07 | 2.38418579101562E-07 | 1.19209289550781E-07 | 5.96046447753906E-08 | 2.98023223876953E-08 | 1.49011611938477E-08 | 7.45058059692383E-09 | 3.72529029846191E-09 | 1.86264514923096E-09 | 9.31322574615479E-10 | 4.65661287307739E-10 | 2.3283064365387E-10 | 1.16415321826935E-10 | 5.82076609134674E-11 | 2.91038304567337E-11 | 1.45519152283669E-11 | 7.27595761418343E-12 | 3.63797880709171E-12 | 1.81898940354586E-12 | 9.09494701772928E-13 | 4.54747350886464E-13 | 2.27373675443232E-13 | 1.13686837721616E-13 | 5.6843418860808E-14 | 2.8421709430404E-14 | 1.4210854715202E-14 | 7.105427357601E-15 | 3.5527136788005E-15 | 1.77635683940025E-15 | 8.88178419700125E-16 | 4.44089209850063E-16 | 2.22044604925031E-16 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
总和 | 1.00000000000000000000/ |
由于2^(-52)的值为 2.2E-16 此为二进制小数的十进制表示时的最小进度,因此Float 数据类型的最最大有效数位为16位,但是此时最小位的最小偏差为2.2,非1,因此舍掉,故为15位有效数字
因此double类型的数据的有效数字位为15位
版权声明:本文为haolask原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。