2^63-1==2^63,MATLAB 2012a中的精度误差
我在MATLAB中处理任意大的数字,我用一个脚本做了一段时间的推敲,最后发现我的问题不是逻辑错误 是这样的: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
>> 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
可用,这肯定是更好的解决方案。