【发布时间】:2014-12-15 16:32:48
【问题描述】:
我正在进行的项目需要高精度。 减法时这里说明了我遇到的问题:
>> 1-0.9999999999999999
ans = 1.1102e-16
>> 1-0.99999999999999999
ans = 0
我知道这与双精度有关。无论如何我可以获得更高的精度吗? 我检查了“vpa”功能,但无法获得更高的精度。 有人可以帮我解决这个问题吗?
提前感谢您!
【问题讨论】:
-
你有安装 Matlab 的符号数学工具箱吗?
-
试试
vpa('1-0.9999999999999999')(注意引号)。vpa(1-0.9999999999999999)不起作用,因为0.9999999999999999首先转换为double -
小注:
vpa需要 Symbolic Math Toolbox,High Performance Mark 最后不可避免地要提到这个工具箱。路易斯也做得很好! -
还有其他提供任意精度精度的语言,例如 python。
-
@AnonSubmitter85:不幸的是,
long double不一定是可移植的,VC++ 将long double映射为简单的double:msdn.microsoft.com/en-us/library/9cx8xs15.aspx。虽然实际上double计算如果在 FPU(x87 的本机格式)上完成,则在 80 位寄存器中执行,但在传输到内存时它们以 64 位存储。有一条指令会影响每次计算后中间结果是否减少到 64 位。
标签: matlab precision floating-accuracy double-precision