我使用VC++ 2010编译器。我下面的代码给出了509:C++:奇怪的双乘法错误
double volume = 5.1;
int n = static_cast<unsigned int>(volume * 100.0);
我想念什么吗?
感谢
我使用VC++ 2010编译器。我下面的代码给出了509:C++:奇怪的双乘法错误
double volume = 5.1;
int n = static_cast<unsigned int>(volume * 100.0);
我想念什么吗?
感谢
浮点数据类型不能代表所有的数字。由于您的计算机使用二进制浮点,只表示数字的形式为S2 Ë其中小号是有效数,并ē是指数。很容易看到5.1不适合该模具。它不完全可以代表。
这个page显示你最接近的精确表示的双精度二进制浮点值到5.1。值为:
5.09999 99999 99999 64472 86321 19949 90706 44378 66210 9375
因此,与5.1的最接近值略小于5.1。将其乘以100并截断,并且您有509.
David Goldberg的What Every Computer Scientist Should Know About Floating-Point Arithmetic的标准参考文献是David Goldberg的文章。
5.1表示为5.099999,与100.0相乘时为509.9990,转换为int后为509。
是你错过了什么... static_cast(..) –
Mario
这是soooooo在这里重复。在[SO]上查找IEEE754和浮点问题。基本上,5.1不能完全表示,实际上它实际上被计为'5.099999999' –
ppeterka
我认为你的代码不能编译。我建议使用'round' –