可能重复:
C++双精度和四舍五入
码:
int main(void)
{
double a = 12;
double b = 0.5;
double c = 0.1;
std::cout.precision(25);
std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << c << std::endl;
std::cout << a + b << std::endl;
std::cout << a + c << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
12
0.5
0.1000000000000000055511151
12.5
12.09999999999999964472863
Run Code Online (Sandbox Code Playgroud)
为什么GCC代表0.1和0.5不同?添加时,它们的表示方式不同.它似乎是0.5,而整数与其他浮点数的表示方式不同.或者这只是在io库中发生的事情?是什么导致这种行为?
正如具有有限位数的十进制数字只能精确地表示10的幂之和的数字一样,二进制浮点数只能精确地表示2的幂之和的数字.
在这种情况下,0.1不能表示为2的幂的有限和,而0.5和12can(0.5等于2 -1并且12等于2 3 + 2 2).
作为另一个例子,0.75也可以用二进制浮点精确表示,因为它可以表示为2 -1 + 2 -2.