MATLAB - 楼层问题
-
20-08-2019 - |
题
我是 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))
这样你就不会任何这样的错误,但你的计算就会慢很多。
不隶属于 StackOverflow