减法时的 MATLAB 精度

MATLAB precision when substracting

提问人:user53534 提问时间:10/21/2014 更新时间:11/1/2014 访问量:128

问:

我需要高精度来完成我正在从事的项目。 我遇到的问题在减去时在这里得到了说明:

>> 1-0.9999999999999999

ans = 1.1102e-16

>> 1-0.99999999999999999

ans = 0

我知道这与双精度有关。无论如何,我可以获得更高的精度吗? 我检查了“vpa”功能,但我无法获得更高的精度。 有人可以帮我解决这个问题吗?

先谢谢你!

MATLAB 浮动 双精度

评论

0赞 High Performance Mark 10/21/2014
您是否安装了 Matlab 的 Symbolic Math Toolbox?
5赞 Luis Mendo 10/21/2014
尝试(注意引号)。 将不起作用,因为首先转换为vpa('1-0.9999999999999999')vpa(1-0.9999999999999999)0.9999999999999999double
0赞 rayryeng 10/21/2014
小提示:需要符号数学工具箱,High Performance Mark 最终不可避免地会提到它。路易斯也干得好!vpa
0赞 serigado 10/21/2014
还有其他语言可以提供任意精度的精度,例如 python。
2赞 Amro 10/21/2014
@AnonSubmitter85:不幸的是,长双精度不一定是可移植的,VC++ 映射到简单的:msdn.microsoft.com/en-us/library/9cx8xs15.aspx。虽然实际上,如果在 FPU(x87 的本机格式)上完成计算,则在 80 位寄存器中执行,但当传输到内存时,它们以 64 位存储。有一条指令会影响每次计算后中间结果是否减少到 64 位。long doubledoubledouble

答:

0赞 aphid 11/1/2014 #1

Matlab 内部使用 64 位系统双精度计算其所有数字,这解释了精度问题。matlab 确实存在允许您使用任意精度算术的扩展。例如,请参阅此问题