浮点数的范围和精度
浮点数的运算比整数效率要低,但是一些特殊的场合还是必须要用浮点数的,因此我们增加了浮点数的运算支持;浮点数是采用科学技术法来描述的,因此讨论浮点数的范围和精度我们必须了解科学计数法:
1.23456E10
对于科学技术法来说,范围有两部分:有效数字和幂;其中有效数字,也就是前面说的1.23456这个值,对于这个我们系统采用22bit二进制来表示(普通c语言的浮点数采用23bit来表示),在22bit下:
2^22=4194304
因此,6位数字肯定没问题,7位数字看情况,因此我们可以记忆为浮点数支持6位半;
对于浮点数,我们准备了下面的程序来说明:
echo(1.23456789);//1.234568
可以看到实际数字有效率为6位半;
为了方便理解,我们通过上面的程序给出了下面对应结果:
输入值 | 输出值 | 说明 |
---|---|---|
0.0000123456789 | 0.000012 | 小数点后的0也算有效数字 |
0.000123456789 | 0.000123 | |
0.00123456789 | 0.001235 | |
0.0123456789 | 0.012346 | |
0.123456789 | 0.123457 | |
1.23456789 | 1.234568 | |
12.3456789 | 12.345678 | |
123.456789 | 123.456787 | |
1234.56789 | 1234.567871 | |
12345.6789 | 12345.677734 | |
123456.789 | 123456.781250 | |
1234567.89 | 1234567.750000 | |
12345678.9 | 12345678.000000 | |
123456789.0 | 123456784.000000 | 注意此时6位半的精度 |
也就是说:
float a=123456789;
float b=123456784;
if (a==b){
echo("true");
}
上面的代码最后返回 true 表示a==b;
对于常规应用,比如计算电功率,电压35.234V,电流2.345A,得到功率:82.623718W,至少在mW级别的小数是可靠的,常规使用足够。