除最后一位数外,这两个长数字相同。
test = [];
test(1) = 33777100285870080;
test(2) = 33777100285870082;
但是当数字放入数组时,最后一位数字会丢失:
unique(test)
ans = 3.3777e+16
我该怎样防止这种情况?这些数字是ID代码,丢失最后一位数字会搞砸一切。
答案 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。