准确找到黄金比例,直到20位小数

时间:2014-02-04 10:15:59

标签: java decimal calculator

黄金比率是一个特殊的比例,可能与生物体各部分的不同维度之间的比例有关。

数学上,可以通过以下公式找到:
(1个+ sq.root(5))/ 2)

通过使用任何类型的数据类型,我无法存储这样的值。 double是最好的,但我无法使用它获得20个小数位。

所以,我想,如果我可以在计算它之后找到比率的最后几位数,然后将其存储在某个变量中并继续这样做。最后,我可以通过一个接一个地加入小数位来完成它。

示例:从1.61083开始,我将提取3,0,8,0,1,6并加入它。

我仍然遇到问题,因为即使在计算过程中它也没有使用这样一个准确的变量。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:4)

java.math.BigDecimal是您的出路

BigDecimal.ONE.add(new BigDecimal(Math.sqrt(5))).divide(new BigDecimal(2))

代表您发布的公式,并将返回1.6180339887498949025257388711906969547271728515625

即,直到小数点后49位

答案 1 :(得分:0)

您可以使用@Philipp提到的java.math.BigDecimal。但是你要面对的下一个问题是java不为BigDecimals提供sqrt函数。所以这是你的出路。我发现这个代码可以帮助你计算BigDecimals的sqrt,直到任何精度。

public static BigDecimal sqrt(BigDecimal d, int precison) {
    BigDecimal TWO =BigDecimal.valueOf(2);
    MathContext mc = new MathContext(precison);
    BigDecimal res = BigDecimal.ONE;
    for(int i=1;i<=precison;i++) {
        res = res.add(d.divide(res,mc)).divide(TWO,mc);
    }

    return res;

}

答案 2 :(得分:0)

使用this post计算平方根:

    BigDecimal five = new BigDecimal(5);
    BigDecimal two = new BigDecimal(2);

    BigDecimal x = new BigDecimal(Math.sqrt(five.doubleValue()));
    BigDecimal sqrt_five =  x.add(new BigDecimal(five.subtract(x.multiply(x)).doubleValue() / (x.doubleValue() * 2.0)));
    System.out.println(BigDecimal.ONE.add(sqrt_five).divide(two));

你得到:1.61803398874989484820458683436564162637092283739506413642905463708132618450008521904237568378448486328125

希望它有所帮助。