关于matlab:创建向量的无法解释的警告

Unexplained warning creating vectors

下面是我创建两个向量时从我的终端打印出来的。有谁知道第二次调用 one() 发出警告而第一次没有发出警告的原因?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
>> p1

p1 =

    0.7000

>> p2

p2 =

    0.3000

>> whos p1
  Name      Size            Bytes  Class     Attributes

  p1        1x1                 8  double              

>> whos p2
  Name      Size            Bytes  Class     Attributes

  p2        1x1                 8  double              

>> N

N =

   100

>> T1 = ones(N*p1,1);
>> T2 = ones(N*p2,1);
Warning: Size vector should be a row vector with integer elements.


是的,您可能认为 100*.3 是一个整数,但事实并非如此。这是因为 0.3 在所使用的 IEEE 数字表示中并未存储为精确的 0.3。大多数这样的十进制数字都没有精确表示。请记住,数字以二进制形式存储。在 matlab 中输入 0.3 时存储的真正十进制表示是:

0.299999999999999988897769753748434595763683319091796875

接近于 0.3,但并非完全如此。

http://www.mit.edu/~pwb/cssm/matlab-faq_toc.html

http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html

有时结果会是一个精确的整数。