float精度不够的情况
程序员文章站
2022-04-27 23:40:31
...
#include <iostream>
using namespace std;
void main()
{
float a=2147483647;
printf("%f",a);
}
运行结果:
2147483648.000000
可以看到结果由…47变成了…48 ,原因是float的精度不够
来看看该 float 变量在内存中的储存
机器码:0100111100…0
float 的底数位只有23位 根本不够把2147483647这十位数给完全表示出来
( int 用了31位才把它表示出来)
但是,阶码的存在允许它把值撑大到2147483647附近——也就是2147483648
即2的31次方
所以,上面的输出结果才会出现误差
如果把 float 换成 double ,精度足够了,就不会有上面的问题出现了
#include <iostream>
using namespace std;
void main()
{
double a=2147483647;
printf("%lf",a);
}
运行结果:
2147483647.000000
double 底数位有52位——绰绰有余~
上一篇: 怎样预防游泳后耳鸣 游泳后耳鸣怎么办
推荐阅读
-
如何解决国标GB28181视频平台EasyGBS运行中端口不够用的情况?
-
Java Float 保留小数位精度的实现
-
解决Golang小数float64在实际工程中加减乘除的精度问题
-
JAVA中如何对double或者float的浮点数进行精度计算长度控制
-
chrome浏览器li使用float:left错位的情况_html/css_WEB-ITnose
-
PHP官网的float转int精度详解
-
chrome浏览器li使用float:left错位的情况_html/css_WEB-ITnose
-
float精度不够的情况
-
PHP官网的float转int精度详解
-
java中float与double精度丢失的实例详解