Matlab似乎有一种刺激性的特征。我不明白为什么两个陈述的结果不同。隐式声明变量导致它具有double类型的知识无助于我理解。有人可以解释他们有何不同?这是代码。
K>> m = int16(2799)
m =
2799
K>> n = int16(2800)
n =
2800
K>> int16( 0.5 * abs(n - m) - 0.5)
ans =
1
K>> int16 ( 0.5 * abs(2799 - 2800) - 0.5)
ans =
0
K>>
答案 0 :(得分:3)
原因是int16算术: abs(n - m) 返回一个int16,因为它给出了int16。结果是1。 乘法也将返回一个int16。因此,0.5 * 1等于1.(分数0.5及以上是向上舍入的)
然后我们有:int16(1 - 0.5)再次是一个。
在另一个语句中,所有变量都是double类型:
int16(0.5 * abs(2799 - 2800) - 0.5)
int16(0.5 * 1 - 0.5)
int16(0.5 - 0.5)
int16(0)
现在,为什么当x是int类时,MATLAB会将0.5 * x计算为整数乘法? 我不知道: - /
但是我在MATLAB中遇到了整数问题,因此倾向于避免使用它们。
好的,乘法是用整数完成的,因为the documentation says so。这与类C语言相反(int * double会产生双倍)但没有错。并且(至少)它被正确定义和记录。