【问题标题】:MATLAB precision when substracting减去时的 MATLAB 精度
【发布时间】: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 映射为简单的doublemsdn.microsoft.com/en-us/library/9cx8xs15.aspx。虽然实际上double 计算如果在 FPU(x87 的本机格式)上完成,则在 80 位寄存器中执行,但在传输到内存时它们以 64 位存储。有一条指令会影响每次计算后中间结果是否减少到 64 位。

标签: matlab precision floating-accuracy double-precision


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    相关资源
    最近更新 更多