我在Matlab中使用ceil函数时遇到了问题。当我输入"ceil(192.00)"时,它返回的结果是192,这是正确的。然而,当我声明一个变量x,并将其赋值为14*(256/20)+(256/20),即恰好为192.00时,ceil(x)返回的结果却是193。这是为什么呢?谢谢!
192.00
,但您没有展示小数点后的所有数字。如果您将该值与整数192进行比较,您会发现它实际上仅仅比192大一点点。差异是由于浮点运算误差造成的。x = 14 * (256 / 20) + (256 / 20);
x - 192
2.8421709430404e-14
如果我们使用Daniel提到的技术在评论中,我们实际上可以看到x的true
值,以验证它确实大于192。
num2str(x, 17)
192.00000000000003
或者为了荒谬之故
num2str(x, 48)
192.000000000000028421709430404007434844970703125
因为这个数稍微大一点,所以会通过ceil
函数向上舍入为193。
如果您想在ceil
函数中有一些灵活性,您可以在执行ceil
函数之前从您的数字中减去一个小的epsilon值。这将允许一些浮点误差,并给您期望的结果。
tolerance = 1e-12
ceil(x - tolerance)
192
我遇到了同样的问题,我的原始错误是:
ceil(168*1.55/1.55)
ans =
169
ceil(168*1.55/1.55 - 0.001)
注意,最好在一系列计算之后再进行减法运算。
ceil(168*1.55/1.55 - 0.001)
如果在计算过程中进行减法运算,可能会得到错误的结果。例如:(168是我的变量位置,最好不要更改变量)
ceil((168-0.00000000000001)*1.55/1.55)
192.00000000000003
。 - Daniel