电子表格计算(至少)具有 C double 的准确性

标签 spreadsheet precision floating-accuracy libreoffice-calc arbitrary-precision

当我注意到 Libre Office 电子表格显示远低于 2^53 的数字的错误值时,我正在做一些计算以计划改进我的主要筛选器的实现,这是 FoxPro 和许多其他精确整数计算的限制内部使用 C double(又名 IEEE 754 double)的语言。

一些快速检查显示了低至 2^50 的数字的错误结果。更糟糕的是,这个片状的软件没有给出任何警告,表明它的工作超出了其操作限制,并且显示的值只是近似值(即使手动输入了正确的值)。我猜他们认为对于像 Excel 这样的 POS 来说足够好然后对他们来说必须足够好(但他们应该将其命名为“Guesstimate”而不是“Calc”)。

无论如何,是否可以将电子表格置于某种准确模式,使 至少达到 的精度 double ,和/或在某些计算超出其数值能力时显示某种警告?

或者有没有其他电子表格适用于在电话和 toastr 都由 64 位芯片供电的时代的程序员?

背景:在这种特殊情况下,需要精度是因为通过将某些结果列与已知数字列表(如 number of primes up to 2^k ,可从 OEIS 获得)或从检测代码派生的数字进行比较来验证公式的准确性。这个想法是通过检查它们的可行范围来获得正确的公式 - 高达 2^32 和 2^40 之间的某个地方 - 然后使用这些公式来研究高达 2^64 范围的行为(其中不可能通过运行详尽的测试获得完整的图片)。

附注 :我发现该问题已在 On the Numerical Accuracy of Spreadsheets ( pdf ) 中进行了广泛的分析。似乎 gnumeric 比其他的要好一点,但这更像是盲人中的独眼,而不是真正通过的集合;此外,它不适用于 Windows,因此需要在我正在开发的平台上启动 Linux VM...

更新/解决方法

最多2^49没有问题,所以可以正常工作。这足以对事物有一个准确的了解。在最终表格中,大数字和高精度结果(在别处计算)作为预先格式化的文本(或者更确切地说是导入/粘贴)输入,这样 Calc 就不会显示。通过应用 VALUE() 函数仍然可以引用这些数字,并且对于许多内联计算,内部精度已经足够了 - 特别是对于图形。

下图展示了我在其中一条评论中发布的内容,即内部精度高于显示的精度。如果程序没有显示实际值,我们应该如何找出它们?尝试添加/减去小值、观察变化、创建和测试关于实际值、假定的舍入行为和显示值的关系的假设?脑子真的是一团糟。

same displayed value but different behaviour

我为以下任何一项提供 赏金 :

  • 一种将 Calc 恢复到 WYSIWI 意义上的理智行为的实用方法(你看到的是里面的东西,或者如果它在里面,那么它就可以显示),而不会降低内部精度,也不会 fork 整个血腥的源树并自行修复
  • 指向精度高于 IEEE 754 double(最好是任意精度,如 GP/PARI 但作为电子表格)的电子表格的指针,该电子表格属于公共(public)领域或共享软件;在线/云的东西是可以接受的

  • 第一项的原因是双重的:一方面,当电子表格精度低于通用 IEEE 754 double 时,这是一个令人讨厌的麻烦,因为这意味着在该基线水平上有关准确性/精度/稳定性的经验/知识不会延续。另一方面,如果我们不能相信显示的值是正确的,即使我们确实知道实际值是正确的,那就更麻烦了。

    第二项的原因是一个简单的事实,即必须在另一个程序中编写脚本以高精度或使用 bignums 计算事物,或者必须为此目的编辑/编译/运行程序,这是相当麻烦的。除了拆分成一个电子表格和一堆脚本或源文件的尴尬之外,在电子表格中工作会更自然和方便。

    最佳答案

    PrecisionCalc是一个 Excel 插件,允许任意计算。精确。

    有一个Free edition有 3,000 位有效数字限制。

    关于电子表格计算(至少)具有 C double 的准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34499255/

    相关文章:

    Perl 找不到函数,但包已安装

    javascript - Math.random 可以产生的最大值是多少?

    math - float 学有问题吗?

    excel - 将 ChChart 控件链接到电子表格控件数据

    google-drive-api - Google Spreadsheet检查从什么单元格VLOOKUP()返回

    java - 乘以幂时可能会损失精度吗?

    javascript - 为什么0.1 + 0.2在JavaScript中返回不可预测的float结果,而0.2 + 0.3却没有?

    floating-accuracy - 双 float 不准确的来源

    floating-point - 我们能说 0.5*x + 0.5*x == x 总是正确的吗?

    java - com.google.gdata.util.AuthenticationException : Error authenticating (check service name) due to this not able to read the google spreadsheets