我是 MATLAB 初学者。问题是这样的:

>> a = floor(7/2.5)

a =

      2.00

>> b = rem(7,2.5)

b =

      2.00

>> c = floor(b/2)

c =

         0

c 应该是 1,对吗?为什么是0???

直接输入 b = 2 时则不同:

>> b = 2

b =

      2.00

>> c = floor(b/2)

c =

      1.00
有帮助吗?

解决方案

在两个词:截断误差

您说的没错,C应该是精确的算法1.0。不过,既然你对物的参数使用的浮动,你得到的答案为float。显然,b为不完全2,但2.0,这意味着它是一个双非常接近2。因此,B / 2变为双1.0,显然在这种情况下其值大于一个略少,给你一个0作为整数值。如果你想避免这种情况,使用这两个楼层和小区,并比较值。

如果您想要的答案整数转换,只需使用轮,而不是地板。

其他提示

如果您添加行

d = b-a

您的例子中,你会看到结果

    d =

 -4.4409e-016

含义Matlab的计算的数目接近,但不完全,2对于b。这出现了不少与浮点数工作。尝试

help eps

获得更多信息。

此类数值问题也可在 MATLAB 常见问题解答

是啊,这是一个数值的问题。您应该使用这样的事情要小心。如果你想精确的算法,你应该尝试“符号”你的电话号码e.g。

b=rem(sym(7),sym(2.5))

这样你就不会任何这样的错误,但你的计算就会慢很多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top