【发布时间】:2020-03-08 03:45:10
【问题描述】:
#include<iostream>
using namespace std;
int main()
{
unsigned int x = 293125555;
double y = (double)x/1000.0;
cout << y << endl;
return 0;
}
我希望输出为 293125.555,但我得到的是 293126。 这是因为 double 存储在内存中的方式吗?
【问题讨论】:
-
@balraj 没有变量精度之类的东西。这仅受类型本身的限制(例如,
float不如double精确)。y已经存储了293125.555(您可以使用调试器对其进行验证),但是您以 6 位有效数字的精度打印它。 -
@balraj 变量的精度仅取决于变量类型以及您的体系结构和编译器。 cppreference.com 说
double:“通常是 IEEE-754 64 位浮点类型” -
在 gdb 中,它说 (gdb) p y $1 = 293125.55499999999
-
@balraj Is floating point math broken?
-
足够好(也就是
double)。