C++中的舍入错误

0 c++ math programming-languages rounding-error rounding

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

语言c ++我正在声明一个数组,我在其中保存数字(类型为double).然后我开始比较数组中每两个元素之间的差异.例如

a[1] = 0.05
a[2] = 0.1
a[3] = 0.15
Run Code Online (Sandbox Code Playgroud)

所以,当我做以下

if(a[3] - a[2] == a[2] - a[1] )
Run Code Online (Sandbox Code Playgroud)

条件变得虚假!!

调试后,我发现0.05在数组中保存为0.0499 ...... 993,情况类似于0.10和0.15

我怎样才能克服这个问题?

unw*_*ind 8

您永远不应该将浮点数与完全相等进行比较.

您应该阅读每个计算机科学家应该知道的关于浮点运算的内容,以找出原因.