ceil 函数不 return 它应该做什么

ceil function doesn't return what it should

我对 matlab 中的 ceil 函数有疑问。当我说 "ceil(192.00)" 时,它应该是 returns 192。但是,当我声明一个变量 x 并将其赋值为 14*(256/20)+(256/20) 时,正好是 192.00,ceil(x) returns 193。这是为什么呢?提前致谢!

这是由于 MATLAB 中的浮点运算 (more info here)。正如您所指出的,值 看起来 192.00,但是您没有显示的是小数点后的所有数字。如果将您的值与整数 192 进行比较,您会发现它实际上 只是 大于 192。不同之处在于浮点运算错误。

x = 14 * (256 / 20) + (256 / 20);
x - 192

    2.8421709430404e-14

如果我们在评论中使用技术 ,我们实际上可以看到 xtrue 值来验证它实际上更大比 192.

num2str(x, 17)

    192.00000000000003

或者为了搞笑

num2str(x, 48)

    192.000000000000028421709430404007434844970703125

因为略高,所以ceil四舍五入到193。

如果你想在 ceil 中有一点灵活性,你总是可以在执行 ceil 之前从你的数字中减去一个小的 epsilon。这将允许一些浮点错误并为您提供预期的结果。

tolerance = 1e-12
ceil(x - tolerance)

    192

我遇到了同样的问题,我原来的bug是:

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)