为什么两个陈述导致不同的结果?

时间:2013-09-29 12:49:32

标签: matlab

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>> 

1 个答案:

答案 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会产生双倍)但没有错。并且(至少)它被正确定义和记录。