Я имею дело с произвольно большими числами в MATLAB, я некоторое время искал скрипт и, наконец, узнал, что моя проблема wasn ' t логическая ошибка.2^63 - 1 == 2^63, прецизионные ошибки в MATLAB 2012a
Именно это:
>> 2^63 - 1 == 2^63
ans =
1
В MATLAB 2012a, без дополнительных библиотек, есть способ справиться с большим количеством до 2^100
?
Edit:
Видимо, точность ошибка происходит, как только 2^54
.
Второй Edit:
По Peter, я могу использовать vpa
. Это фактически решает проблему довольно хорошо:
>> vpa(sym(2^63)) - vpa(sym(2^63) - 1)
ans =
1.0
Возможный дубликат: http://stackoverflow.com/questions/588004/is-floating-point-math-broken – Peter
Вы рядом. Если вы представляете целое число с переменной с плавающей запятой, то максимальное целое число, которое вы можете представить без ошибок, равно 2^53. См. [Flintmax] (http://it.mathworks.com/help/matlab/ref/flintmax.html). –
Зависит от того, что вы подразумеваете под «дополнительными библиотеками». Symbolic Math Toolbox предоставляет 'vpa' (арифметику с переменной точностью) для этого – Peter