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之类的东西.我就像"地狱里的东西"
有人可以帮我这个.这可能是我不完全理解的数据类型本身.因此,如果有人可以进一步解释,我们将不胜感激.
这是一个数字问题.问题是1/10是二进制的无穷长数,并且10的除法的连续应用最终会导致每个步骤中的误差相加.要获得更稳定的版本,您应该乘以除数.但要小心:结果也不准确!您可能希望用double替换float以最小化错误.
unsigned int div = 1;
while(...)
{
double step = 1.0 / (double)div;
....
div *= 10;
}
Run Code Online (Sandbox Code Playgroud)