如果答案的绝对或相对误差小于10^(- 6),则视为正确
Your answer will be considered as correct if it has an absolute or relative error less than 10^(−6)
在许多规划问题中,都会提到上述约束。我在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- 欧拉项目#8答案是大以获得有效答案
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 首要问题的答案让值班员搞错了
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 从值小于256的uint16到uint8的Endian安全转换
- 将stl字符串缩小到小于15个字符的容量
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 使用 bfs 解决连接组件问题时得到错误的答案
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 为什么我只能在C++中使用可变长度数组分配小于 10 mb 的内存?
- 同一对象的"sizeof"的不同答案
- 递归求和任务的错误答案
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 为什么C++程序在太大时返回代码而不是答案?
- 如何为字符串生成唯一但一致的 N 位哈希(小于 64 位)?
- 不理解为什么代码没有产生所需的答案
- 为什么我在代码厨师的 CMPRSS 问题中得到 WA(错误答案)?
- sizeof(size_t) 可以小于 sizeof(int) 吗?
- C++:如何计算二叉树中其值模块高度小于 2 的节点数?
- 如果答案的绝对或相对误差小于10^(- 6),则视为正确