/ / 20 दशमलव स्थानों तक स्वर्ण अनुपात का सटीक पता लगाना - जावा, दशमलव, कैलकुलेटर

स्वर्ण अनुपात को 20 दशमलव स्थानों तक सटीक रूप से ढूंढना - जावा, दशमलव, कैलकुलेटर

स्वर्ण अनुपात एक विशेष अनुपात है जो जीवित जीव के कुछ हिस्सों के विभिन्न आयामों के बीच के अनुपात से संबंधित हो सकता है।

गणितीय रूप से, इसे निम्नलिखित सूत्र द्वारा पाया जा सकता है:
(1 + sq.root (5)) / 2)

किसी भी प्रकार के डेटा-प्रकार का उपयोग करके मैं इस तरह के मूल्य को स्टोर नहीं कर सका। double सबसे अच्छा है, लेकिन मैं इसका उपयोग करके 20 दशमलव स्थान प्राप्त नहीं कर सकता।

तो, मैंने सोचा, अगर मैं के अंतिम अंक पा सकते हैंयह गणना करने के बाद का अनुपात, और फिर इसे कुछ चर में संग्रहीत करें और ऐसा करने पर जाएं। अंत में मैं एक के बाद एक दशमलव स्थानों में शामिल होकर इसे पूरा कर सकता था।

उदाहरण: 1.61083 से, मैं 3,0,8,0,1,6 निकालूंगा और इसमें शामिल होऊंगा।

फिर भी, मुझे गणना के दौरान भी समस्याएँ हैं क्योंकि यह ऐसे सटीक चर का उपयोग नहीं करता है।

क्या कोई मदद कर सकता है?

उत्तर:

उत्तर № 1 के लिए 4

java.math.BigDecimal जाने का आपका रास्ता है

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

उस सूत्र का प्रतिनिधित्व करता है जिसे आपने पोस्ट किया था और 1.6180339887498949025257388711906969547271728515625

यानी 49 दशमलव स्थानों तक


जवाब के लिए 0 № 2

आप उपयोग कर सकते हैं java.math.BigDecimal जैसा कि @Philipp द्वारा बताया गया है। लेकिन आपको जो अगली समस्या आएगी, वह यह है कि java does 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;

}

जवाब के लिए 0 № 3

का उपयोग करते हुए ये पद वर्गमूल की गणना करने के लिए:

    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.61803398878989482045868343656416263709228373950641364290546370813261845000000219042375683784488686328125

आशा करता हूँ की ये काम करेगा।