Необъяснимое предупреждение о создании векторов - PullRequest
1 голос
/ 29 августа 2011

Ниже распечатка из моего терминала, когда я создаю два вектора из них. Кто-нибудь знает причину, по которой второй вызов 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. 

1 Ответ

5 голосов
/ 29 августа 2011

Да, вы можете подумать, что 100 * .3 будет целым числом, но это не так.Это связано с тем, что в используемом числовом представлении IEEE значение 0,3 не сохраняется точно как 0,3.Большинство таких десятичных чисел не представлены точно.Помните, что числа хранятся в двоичной форме.Истинное десятичное представление того, что сохраняется при вводе 0,3 в Matlab:

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

Иногда результат может быть точным целым числом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...