使用(至少)C double

时间:2015-12-28 19:08:30

标签: 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,并/或让它显示某种警告当一些计算超过其数值能力?

或者是否有其他电子表格适用于甚至电话和烤面包机由64位芯片供电的时代的程序员?

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

P.S。:我发现问题已在On the Numerical Accuracy of Spreadsheetspdf)中进行了广泛分析。 gnumeric似乎比其他人更好一些,但更多的是盲人中的独眼人而不是真正的集合;此外,它不适用于Windows,因此需要在我正在开发的平台上启动Linux VM并为...

UPDATE /替代方法

最多2 ^ 49没有问题,因此可以正常工作。这足以准确了解事物。在最终表格中,大数字和高精度结果(在其他地方计算)作为预格式化文本(或者更确切地说是导入/粘贴)输入,以便Calc不会使显示屏生硬。仍然可以通过应用VALUE()函数来引用这些数字,对于许多内联计算,内部精度非常充足 - 特别是对于图形化。

下图显示了我在其中一条评论中发布的内容,即内部精度高于显示的内容。如果程序没有显示它们,我们如何才能找出实际值是什么?通过添加/减去小值,观察更改,创建和测试关于实际值的关系,假设的舍入行为和显示值的假设来解决问题?心灵真的很难过。

same displayed value but different behaviour

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

  • 一种实用的方法,在所见即所得的意义上恢复Calc的理智行为(你看到的是什么内部,或者更确切地说,如果它在里面,那么它可以显示),而不会降低内部精度,也不会影响整个血腥源树和自己修理

  • 指向电子表格的指针,其精度高于IEEE 754 double(最好是任意精度,如GP/PARI,但作为电子表格)是公共域或共享软件;

  • 可以接受在线/云计算的东西

第一项的原因有两个:一方面,当电子表格精度低于通用IEEE 754 double时,这是一种血腥的麻烦,因为这意味着在该基线水平上的准确度/精度/稳定性的经验/知识不会结转。另一方面,如果我们不相信显示的值是正确的,即使我们确切知道实际值是正确的,那也是更大的麻烦。

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

3 个答案:

答案 0 :(得分:2)

PrecisionCalc是一个Excel添加,允许任意计算。精度。

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

Maciek Sawicki(请参阅问题评论)发现Excel的插件允许使用任意精度进行计算:xlPrecision/PrecisionCalc。这是一个价格极其合理的共享软件。