- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我注意到 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()
函数仍然可以引用这些数字,并且对于许多内联计算,内部精度已经足够了 - 特别是对于图形。
下图展示了我在其中一条评论中发布的内容,即内部精度高于显示的精度。如果程序没有显示实际值,我们应该如何找出它们?尝试添加/减去小值、观察变化、创建和测试关于实际值、假定的舍入行为和显示值的关系的假设?脑子真的是一团糟。
我为以下任何一项提供 赏金 :
最佳答案
PrecisionCalc是一个 Excel 插件,允许任意计算。精确。
有一个Free edition有 3,000 位有效数字限制。
关于电子表格计算(至少)具有 C double 的准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34499255/
下面的代码有效,我觉得double(double)和double(*)(double)没有区别,square和 &square,我说得对吗? #include double square(doubl
我知道我的作业很草率,这是我在这门课上的第 4 次作业。任何帮助将不胜感激,谢谢。 double getPrincipal(0); double getRate(0); double getYe
我遇到了那个错误,当我使用类时,我在使用函数指针时遇到了这个错误。我的函数'ope'函数我该如何解决 evaluator::function(){ double (*ope) (dou
问题://故事从哪里开始 Graphics 类型中的方法 drawLine(int, int, int, int) 不适用于参数 (double, double, double, double) g.
我有一张 map> m1 形式的 map .我可以将其复制到 map m2 形式的 map 吗?这样键是相同的,并且 m2 中的值是 get(m1->second) 不使用循环?谢谢! 最佳答案 这样
有没有办法获取vector> 的“.first”和“.second”的连续内存? ?我的意思是: void func(int N, double* x, double* y) { for (i
我正在尝试将自定义 lambda 传递给需要函数指针的函数(更准确地说是 zero 中的 Brent library 函数)。 我的想法是,我将使用参数创建一次 lambda,然后用多个值对其求值 x
这是一个很简单的问题,让我很困惑。 我收到一个源文件的以下错误,但另一个没有: 4 src/Source2.cpp:1466: error: no matching function for cal
struct CalculatorBrain { private var accumulator: Double? func changeSign(operand: Double) -
在我正在进行的项目中,我尝试使用 curlpp库来发出一个简单的 html GET 请求。当我将 cpp 文件传递给 g++ 时,出现以下错误: /usr/local/include/curlpp
不使用double就能获得quadruple精度超过16位的数字吗?如果可能的话,这取决于编译器还是其他?因为我知道有人说他使用double精度,并且具有22位精度。 最佳答案 数据类型double
我正在寻找有关特斯拉 GPU 中硬件如何实现 double 的信息。我读到,两个流处理器正在处理单个 double 值,但我没有找到 nvidia 的任何官方论文。 提前致谢。聚苯硫醚为什么大多数 G
这个问题在这里已经有了答案: Passing capturing lambda as function pointer (10 个答案) 关闭 2 年前。 我有这个错误 error: cannot
情况:我有一个元组列表,其中添加了一个元组: List> list = new List>(); list .Add(new Tuple(2.2, 6.6)); 一切似乎都还好。但是......在 D
我有一个 JList,里面有一堆名字,还有一个包含这些名字值的数组 final Double[] filmcost = { 5.00, 5.50, 7.00, 6.00, 5.00 }; 我想做的是,
我试图找出牛顿法来求方程的根。这个错误出来了,我无法处理。 double fn(double n){ return sin(n)+log(n)-1; } double f1n(double n
我有一个 junit 测试断言两个 Double 对象,具有以下内容: Assert.assertEquals(Double expected, Double result); 这很好,然后我决定将其
我正在尝试引入部分数据文件来填充数组,用户尝试了三次输入正确的数据文件名。我一再遇到这些错误。我知道像 arr 这样的数组只是一个指向内存块的指针。 #include #include #incl
我正在尝试完成复习题(为即将到来的编程决赛),但是,我无法解决这个问题,因为我不断收到错误(标题)。正如预期的那样,我将发布问题和我尝试的解决方案。 问题: 给定以下函数定义:void swap(do
任何人都知道如何实现这一目标。我已经尝试了通常的公式,但我只得到正数 Double.NEGATIVE_INFINITY) return d; } } 这将以相同的概率
我是一名优秀的程序员,十分优秀!