BigDecimal的数量级

时间:2011-06-24 14:39:28

标签: java precision bigdecimal

我正在尝试测量计算结果的准确性(作为双精度),与具有已知正确结果的BigDecimal相比,任意精度。我想确保它是正确的x小数位。我认为这可以这样做:

(正确结果的数量级) - (差异的数量级)> X

我很难找到一种简单的方法来计算BigDecimal的数量级。有什么想法吗?

如果这是衡量准确性的一种不好的方法,我会接受其他技术。

2 个答案:

答案 0 :(得分:3)

要检查正确的小数位数,您只需要差异的数量级,而不是正确结果的数量级。因此,我认为您需要将double计算结果转换为BigDecimal,减去精确结果,然后转换回double并将对数取为基数10.

或者,如果您只需要检查结果是否精确到x小数位,那么只需检查差异是否大于0.5 * 10 ^( - x),或等效:

int x = 3; // number of decimal places required
BigDecimal difference = accurateResult.subtract(new BigDecimal(approxResult));
BigDecimal testStat = difference.movePointRight(x).abs();
boolean ok = testStat.compareTo(new BigDecimal(0.5)) <= 0;

实际上,根据“正确到x小数位”的确切含义以及你需要的严谨程度,可能不会正确退出。你可以说0.15001和0.24999等于1位小数(两者都是0.2),但0.19999和0.25001虽然差异较小,但并不均匀。如果你这样做我认为你只需要将两个数字明确地舍入到x小数位然后进行比较。

答案 1 :(得分:0)

由于您似乎只对粗略估计感兴趣:您应该比较两个值的log_10,它告诉您错误的数量级...您可以通过查看得到BigInteger的log_10的良好近似值在其十进制表示的长度toString(10).length()