在JUnit中,双精度的assertEquals采用绝对值delta。但是,保证金的百分比值是否比绝对值更合适?当一个人比较两个大值时,由于四舍五入的误差(如果有的话)可能会导致最后一个有效数字而不管指数。在这种情况下,有一个绝对的delta是没有用的,是吗?
这并不难,我写了一篇,但只是好奇为什么JUnit没有这个功能。我错过了什么吗?
答案 0 :(得分:5)
这取决于具体情况。如果你有一个固定的精度,例如两个小数位,你可能想要一个0.5e-2的增量,但如果你有一个未知的精度,你想要有效数字,你可能需要更复杂的东西,如
assertEquals(expected, actual, Math.abs(expected) / 1e3);
相对错误的问题是难以知道它是否应该与预期的,实际的或两者的某种组合相关。
答案 1 :(得分:0)
我们只能假设JUnit API中没有线索,但它针对浮点域中数字表示的小差异(当您在小数点后的第15个位置有差异时)。毕竟,从绝对值版本到执行版本比反过来更容易。
答案 2 :(得分:0)
百分比容差对于预期值为零的情况不利,但您愿意接受一个非常小的值足够好。因此,cuurent API可用于所有数值。