如果答案的绝对或相对误差小于10^(- 6),则视为正确

Your answer will be considered as correct if it has an absolute or relative error less than 10^(−6)

本文关键字:答案 小于 相对误差 如果      更新时间:2023-10-16

在许多规划问题中,都会提到上述约束。我在codechef和SPOJ中都看到过。

。Link-1, Link-2等等。(参见这两个示例链接中的OUTPUT一节)

这个约束的含义是什么?如何确保输出指定了该约束?

绝对误差为:

|computedAnswer - correctAnswer|

相对错误为:

|(computedAnswer - correctAnswer) / correctAnswer|

直观地说,绝对误差是计算出的答案(或近似值)与正确(可能是未知的)答案之间的距离。相对误差是绝对误差与正确答案之比。

因此,无论你是用激光测距仪测量到月球的距离,还是在狐步舞中试图正确地放置左脚,你的绝对误差都可能是半米。对于月球距离的测量,这将是非常好的;如果是狐步舞,你就会被踢出《与星共舞》

除了Ted Hopp所说的,减少误差的一个可能重要的因素是通过以下方式最小化浮点漂移/不准确性:

  • 通过简化/评估将在输入上工作的操作集来减少总浮点计算。(例如,尽可能地简化数学表达式)。这是因为浮点错误会在后续操作中复合。
  • 使用最高精度(例如double)进行计算。
  • 或者,您可以使用分数类型或更适合数字的类,然后在末尾计算为浮点值。

这是一个简单的计算机问题:求1/3的值。

如果你使用"正常"的计算机数字,如浮点数,双精度等,那么你计算的1/3的版本将不会是0.3333....,它将是0.333333333332或0.333333333334或类似的东西,因为1/3不能精确地表示为浮点数或有限十进制展开。当然可以在10^-6的相对和绝对误差范围内计算1/3到;0.333333333332和0.3333333334都满足此精度要求。

因此,这个要求答案只能精确到10^-6以内的要求允许计算机使用浮点数和双精度来解决那些只使用浮点数和双精度不具有精确数值解的问题。事实上,这几乎是所有的数值问题——大多数分数不能精确地用数字计算;

出题者的意思是如果:

sqrt((your_answer - their_answer)^2) < 1*10^-6

那么你是"正确的"

比较浮点值是否精确是很有问题的。这是因为在有限精度的机器中,四舍五入(例如,某些数学答案不能用有限位数表示,例如1.0/3.0)。

在计算机上执行的许多问题的解决方案都是迭代的。这意味着,您从第一个猜测开始,并计算要改变多少猜测。然后你重复这个过程,计算你的猜测会改变多少。重复此过程后,您更改猜测的数量将变得越来越小(它将收敛)。一旦变化小于某个特定的量,你可以认为你的答案已经收敛,你现在有一个"正确的";的答案。梯度体面算法是这种技术的一个经典例子。我没有仔细查看提供的链接,但也许要获得答案,您需要一个迭代解决方案,在这种情况下,您应该使用1.0 * 10^-6作为您的极限,以测试您的解决方案是否收敛。 http://en.wikipedia.org/wiki/Gradient_descent

看来你发布的网站的链接是一些问题,可以让它们自己使用数值方法:

http://en.wikipedia.org/wiki/Numerical_analysis