2

Matlab 似乎有一个令人讨厌的特性。我不明白为什么语句的两个结果是不同的。变量的隐式声明导致它具有双重类型的知识并不能帮助我理解。有人可以解释它们有何不同吗?这是代码。

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

1 回答 1

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 中遇到了整数问题,因此倾向于避免使用它们。


好的,乘法是用整数完成的,因为文档是这样说的。这与类 C 语言相反(int * double 会产生 double)但没有错。并且(至少)它被正确定义和记录。

于 2013-09-29T13:14:24.780 回答