C++ 中的双重行为很奇怪
Double acts weird in C++
我正在尝试制作一个小型图形演示,并在每次迭代时将一个变量(假设它称为 B)增加 0.05。
问题,代码没有按预期工作。
#include <iostream>
int main(void)
{
double b = 0;
for (int i = 0; i < 3001; ++i) {
if (b < 150)
b += 0.05;
std::cout << b << std::endl;
}
}
最后一个结果的预期结果是“150.00”或“150”,但它打印的是“150.05”。
不知何故,代码再次运行 b += 0.05;
。
老实说,我不知道如何在互联网上搜索修复程序,我无法用简短的句子来表达这个错误。
是因为双精度。您可以使用整数来解决它:
int main(void)
{
int b = 0;
for (int i = 0; i < 3001; ++i) {
if (b < 15000)
b += 5;
std::cout << b/100 << std::endl;
}
}
代码好像没问题,问题是电脑是怎么计算的,看看this网站。
基本上不是所有的小数都可以用二进制表示:
二进制使用 0 和 1
十进制使用 0,1,2,3,4,5,6,7,8 和 9
我正在尝试制作一个小型图形演示,并在每次迭代时将一个变量(假设它称为 B)增加 0.05。 问题,代码没有按预期工作。
#include <iostream>
int main(void)
{
double b = 0;
for (int i = 0; i < 3001; ++i) {
if (b < 150)
b += 0.05;
std::cout << b << std::endl;
}
}
最后一个结果的预期结果是“150.00”或“150”,但它打印的是“150.05”。
不知何故,代码再次运行 b += 0.05;
。
老实说,我不知道如何在互联网上搜索修复程序,我无法用简短的句子来表达这个错误。
是因为双精度。您可以使用整数来解决它:
int main(void)
{
int b = 0;
for (int i = 0; i < 3001; ++i) {
if (b < 15000)
b += 5;
std::cout << b/100 << std::endl;
}
}
代码好像没问题,问题是电脑是怎么计算的,看看this网站。 基本上不是所有的小数都可以用二进制表示: 二进制使用 0 和 1 十进制使用 0,1,2,3,4,5,6,7,8 和 9