ceil函数没有返回它应该

时间:2016-03-23 23:07:05

标签: matlab octave ceil

我在matlab中遇到ceil函数问题。当我说" ceil(192.00)"它应该返回192。但是,当我声明变量x并将其指定为14 *(256/20)+(256/20)时,正好是192.00,ceil(x)返回193.为什么会这样?提前谢谢!

2 个答案:

答案 0 :(得分:4)

这是由于MATLAB中的浮点运算(more info here)。正如您所指出的,值显示为192.00,但您未显示的是小数点后的所有数字。如果将您的值与整数192进行比较,您会发现它实际上大于192.差异是由于浮点算术错误。

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

    2.8421709430404e-14

如果我们在评论中使用mentioned by Daniel技术,我们实际上可以看到x true 值来验证它实际上是否大于192。

num2str(x, 17)

    192.00000000000003

或者为了荒谬而

num2str(x, 48)

    192.000000000000028421709430404007434844970703125

因为它略高,所以它会被ceil向上舍入到193。

如果您想在ceil中获得一点灵活性,则可以在执行ceil之前从您的号码中减去一个小ε。这将允许一些浮点错误,并为您提供您期望的结果。

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

    192

答案 1 :(得分:0)

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

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)