Как остановить матлаб, усекающий длинные номера

Эти два длинных числа совпадают, за исключением последней цифры.

test = []; test(1) = 33777100285870080; test(2) = 33777100285870082;

но последняя цифра теряется, когда числа помещаются в массив:

unique(test)

ans = 3.3777e+16

Как я могу это предотвратить? Цифры - это идентификационные коды, и потеря последней цифры забивает все.

Ответ 1

Matlab использует 64-битное представление с плавающей запятой по умолчанию для чисел. У них есть 16-значная точность базы-10 (более или менее), и ваши цифры, похоже, превышают это.

Используйте что-то вроде uint64 для хранения ваших номеров:

> test = [uint64(33777100285870080); uint64(33777100285870082)];
> disp(test(1));
   33777100285870080
> disp(test(2));
   33777100285870082

Это действительно ошибка округления, а не ошибка отображения. Чтобы получить правильные строки для вывода, используйте int2str, потому что, опять же, num2str использует 64-битное представление с плавающей запятой и имеет ошибки округления в этот случай.