将浮动除以10

Sha*_*Hsu 1 c++ floating-point floating-accuracy inexact-arithmetic

可能重复:
为什么十进制数不能用二进制表示?

我正在开发一个非常简单的C++数学使用算法.

我有一个名为"step"的浮点变量,每次我完成while循环,我需要将步除以10.

所以我的代码有点像这样,

float step = 1;
while ( ... ){
      //the codes
      step /= 10;
}
Run Code Online (Sandbox Code Playgroud)

在我愚蠢的简单逻辑中,结束了.步骤将除以10,从1到0.1,从0.1到0.01.

但事实并非如此,而是出现了0.100000000001之类的东西.我就像"地狱里的东西"

有人可以帮我这个.这可能是我不完全理解的数据类型本身.因此,如果有人可以进一步解释,我们将不胜感激.

tho*_*mas 5

这是一个数字问题.问题是1/10是二进制的无穷长数,并且10的除法的连续应用最终会导致每个步骤中的误差相加.要获得更稳定的版本,您应该乘以除数.但要小心:结果也不准确!您可能希望用double替换float以最小化错误.

unsigned int div = 1;
while(...)
{
    double step = 1.0 / (double)div;
    ....
    div *= 10;
}
Run Code Online (Sandbox Code Playgroud)