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 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/haolask/article/details/105117409