如何检查一个数字是否不在两个平方根的50位小数之内?

时间:2013-11-02 16:09:46

标签: logging bigdecimal square-root absolute-value

我明白双重可能不够准确。但是,我找不到使用BigDecimal的方法。我试过了

while(Math.log10(Math.abs(a.subtract(new BigDecimal(1.41421356237309504880168872420969807856967187537694))) >= -50 || Math.log10(Math.abs(b.subtract(new BigDecimal(1.41421356237309504880168872420969807856967187537694)))) >= -50 )
{
    \\ stuff goes here
}

但它说我不能使用log 10或BigDecimals的绝对值。

1 个答案:

答案 0 :(得分:0)

new BigDecimal(1.41421356237309504880168872420969807856967187537694)

1.414...有一个双字面值,因此在程序运行之前它会被截断为双倍精度。您需要将其作为字符串传递:

new BigDecimal("1.41421356237309504880168872420969807856967187537694")

至于比较,您应该可以使用以下内容:

if(a.subtract(new BigDecimal("1.41421356237309504880168872420969807856967187537694")).abs().scaleByPowerOfTen(50).doubleValue() < 1 || ...