如何阻止matlab截断长数

时间:2014-09-25 12:31:03

标签: matlab

除最后一位数外,这两个长数字相同。

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

但是当数字放入数组时,最后一位数字会丢失:

unique(test)

ans = 3.3777e+16

我该怎样防止这种情况?这些数字是ID代码,丢失最后一位数字会搞砸一切。

2 个答案:

答案 0 :(得分:12)

Matlab默认使用64位浮点表示数字。它们具有10位16位精度(或多或少),你的数字似乎超过了它。

使用类似uint64的内容来存储您的号码:

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

这实际上是一个舍入错误,而不是显示错误。要获得用于输出目的的正确字符串,请使用int2str,因为num2str再次使用64位浮点表示,并且在这种情况下具有舍入错误。

答案 1 :(得分:2)

要为@ rubenvb的解决方案添加更多解释,flintmax的值大于IEEE 754 double precision floating-point,即大于2^53。在此之后,并非所有整数都可以精确地表示为双精度。另请参阅this related question