具有(至少)C double 精度的电子表格计算

Spreadsheet calculations with (at least) the accuracy of a C double

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

一些快速检查显示低至 2^50 的数字的错误结果。更糟糕的是,这个不稳定的软件没有发出任何警告,表明它正在超出其操作限制,并且显示的值只是近似值(即使手动输入了正确的值)。我猜他们认为什么对 POS 足够好,比如 Excel 那么对他们来说一定足够好(但他们应该将其命名为 'Guesstimate' 而不是 'Calc')。

无论如何,是否有可能将电子表格置于某种精确模式,使 至少 达到 double、and/or 的精度当某些计算超出其数值能力时,它会显示某种警告吗?

或者在这个连电话和烤面包机都由 64 位芯片供电的时代,是否还有其他适合程序员的电子表格?

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

P.S.:我发现这个问题已经在 On the Numerical Accuracy of Spreadsheets (pdf). It seems that gnumeric 中得到了广泛的分析,比其他的要好一点,但更像是一个案例盲人中的独眼人,而不是真正合格的人;此外,它不适用于 Windows,因此需要 Linux 虚拟机才能在我正在开发的平台上启动...

UPDATE/WORKAROUND

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

下图演示了我在其中一条评论中发布的内容,即内部精度高于显示的精度。如果程序不显示它们,我们应该如何找出实际值是多少?使用 adding/subtracting 小值、观察变化、创建和测试关于实际值、假设的舍入行为和显示值之间关系的假设?脑子真乱。

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

第一项的原因是双重的:一方面,当电子表格精度低于通用 IEEE 754 double 时,这是一件令人讨厌的事情,因为这意味着 experience/knowledge 关于 accuracy/precision/stability该基线水平不会延续。另一方面,如果我们不能相信显示的值是正确的,即使我们确定实际值是正确的,那就更麻烦了。

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

Maciek Sawicki(请参阅问题评论)找到了 Excel 的插件,允许以 任意 精度进行计算:xlPrecision/PrecisionCalc。这是一款价格非常合理的共享软件。

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

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

Calc 5.1(即将推出)将解决此问题:https://bugs.documentfoundation.org/show_bug.cgi?id=96918