欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 变量在内存中的储存

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位——绰绰有余~

相关标签: 数据类型