2^63-1==2^63,MATLAB 2012a中的精度误差

2^63-1==2^63,MATLAB 2012a中的精度误差,matlab,Matlab,我在MATLAB中处理任意大的数字,我用一个脚本做了一段时间的推敲,最后发现我的问题不是逻辑错误 是这样的: >> 2^63 - 1 == 2^63 ans = 1 在Matlab2012a中,如果没有其他库,是否有一种方法可以处理多达2^100的大量数据 编辑: 显然,只要2^54,就会发生精度错误 第二次编辑: 根据,我可以使用vpa。这实际上很好地解决了问题: >> vpa(sym(2^63)) - vpa(sym(2^63) - 1) ans

我在MATLAB中处理任意大的数字,我用一个脚本做了一段时间的推敲,最后发现我的问题不是逻辑错误

是这样的:

>> 2^63 - 1 == 2^63

ans = 

     1
在Matlab2012a中,如果没有其他库,是否有一种方法可以处理多达
2^100的大量数据

编辑
显然,只要
2^54
,就会发生精度错误

第二次编辑
根据,我可以使用
vpa
。这实际上很好地解决了问题:

>> vpa(sym(2^63)) - vpa(sym(2^63) - 1)

ans =

1.0

Matlab附带了一个JRE。使用java类
java.math.BigDecimal
解决这个问题

Matlab附带了一个JRE。使用java类
java.math.BigDecimal
解决这个问题

命令
vpa
作为符号数学工具箱的一部分提供。它使用CPU本机浮点值以外的数字表示来执行“无限精度”数学。然而,这确实意味着算术运算会慢得多,数字会占用更多的空间。

命令
vpa
是作为符号数学工具箱的一部分提供的。它使用CPU本机浮点值以外的数字表示来执行“无限精度”数学。然而,这确实意味着运算速度会慢得多,数字会占用更多的空间。

可能的重复:你就在附近。如果用浮点变量表示整数,则可以表示的无错误最大整数为2^53。请参阅。这取决于“附加库”的含义。符号数学工具箱为以下对象提供了
vpa
(可变精度算术)this@AdrianoRepetti我使用以下代码行查看问题何时开始:
[(1:63)][2.^(1:63)][2.^(1:63)]==[2.^(1:63)'-1]
@Peter我没有额外的工具箱。安装了VPA,效果很好。如果你把它作为一个答案,我会接受的。可能重复:你就在附近。如果用浮点变量表示整数,则可以表示的无错误最大整数为2^53。请参阅。这取决于“附加库”的含义。符号数学工具箱为以下对象提供了
vpa
(可变精度算术)this@AdrianoRepetti我使用以下代码行查看问题何时开始:
[(1:63)][2.^(1:63)][2.^(1:63)]==[2.^(1:63)'-1]
@Peter我没有额外的工具箱。安装了VPA,效果很好。如果你把它作为一个答案,我会接受的。
vpa
没有无限精度,但是你可以指定你需要的精度。检查
数字
。如果
vpa
可用,这肯定是更好的解决方案。
vpa
没有无限精度,但您可以指定所需的精度。检查
数字
。如果
vpa
可用,这肯定是更好的解决方案。