下面是我创建两个矢量时的终端打印输出。有没有人知道为什么第二次调用 ones()会发出警告,而第一次调用没有?
>> 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.
答案 0 :(得分:5)
是的,您可能认为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
有时结果会变成一个完整的整数。