黄金比率是一个特殊的比例,可能与生物体各部分的不同维度之间的比例有关。
数学上,可以通过以下公式找到:
(1个+ sq.root(5))/ 2)
通过使用任何类型的数据类型,我无法存储这样的值。 double
是最好的,但我无法使用它获得20个小数位。
所以,我想,如果我可以在计算它之后找到比率的最后几位数,然后将其存储在某个变量中并继续这样做。最后,我可以通过一个接一个地加入小数位来完成它。
示例:从1.61083开始,我将提取3,0,8,0,1,6并加入它。
我仍然遇到问题,因为即使在计算过程中它也没有使用这样一个准确的变量。
有人可以帮忙吗?
答案 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
希望它有所帮助。