2009-09-06 17 views
29

जावा में बिगडिसीमल पर स्क्वायर रूट के लिए कोई पुस्तकालय हैं?क्या BigDecimal पर स्क्वायर रूट के लिए पुस्तकालय हैं?

+0

मुझे आश्चर्य है, आपको BigDecimal की वर्ग जड़ों की गणना करने की आवश्यकता क्यों है? डबल बहुत छोटी रेंज है? –

+11

इसी कारण से कोई भी BigDecimal का उपयोग करता है: डबल में सटीकता की कमी होती है। –

+0

डैनियल, लेकिन वर्ग रूट की गणना भी करता है। आप अनंत परिशुद्धता के साथ sqrt (2) की गणना नहीं कर सकते हैं। स्क्वायर रूट की गणना करने के लिए न्यूटन विधि का उपयोग करके एल्गोरिदम में निहित, स्वयं की एक त्रुटि प्रस्तुत होती है। –

उत्तर

14

JScience v4.3.1 में Real कक्षा है जो BigDecimal के समतुल्य प्रतीत होती है और यह आपकी मदद कर सकती है। उपयोग का एक उदाहरण:

// The Square Root of Two, to 30 digits 
// According to "The Square Root of Two, to 5 million digits." 
// Source: http://www.gutenberg.org/files/129/129.txt 
System.out.println("1.41421356237309504880168872420"); 

// Using JScience with 50 digits precision 
Real.setExactPrecision(50); 
System.out.println(Real.valueOf(2).sqrt()); 

// Using default java implementation 
System.out.println(Math.sqrt(2)); 

> 1.41421356237309504880168872420 
> 1.414213562373095048801689 
> 1.4142135623730951 

संपादित: समय (v4.3.1) पर वर्तमान संस्करण को प्रतिबिंबित करने के कोड और लिंक अपडेट किया गया। @ile an @Tomasz टिप्पणियों के आधार पर, धन्यवाद।

+0

शानदार, धन्यवाद! –

+0

मैंने JScience पैकेज डाउनलोड किया और ऐसा लगता है कि अब कोई दशमलव नहीं है। उपरोक्त लिंक टूटा हुआ है। –

+0

इसमें एक लार्जइंटर वर्ग है जो समतुल्य लगता है http://jscience.org/api/org/jscience/mathematics/number/LargeInteger.html –

12

Big Square Roots आज़माएं। यह वर्ग की जड़ों जैसे समाधानों को अनुमानित करने के लिए Newton's method का उपयोग करता है।

+0

लिंक टूटा हुआ है। लेकिन मैं वही कोड प्राप्त कर सकता हूं जो https://ritdml.rit.edu/bitstream/handle/1850/8800/BigSquareRoot.java?sequence=4 – demongolem

+0

डेमोंगोलम की टिप्पणी में लिंक भी टूटा हुआ है –

1

जब तक आपके BigDecimal डबल की सीमा में है, तो आप BigDecimal दोगुना करने के लिए, Math.sqrt (का उपयोग करें) कन्वर्ट और डबल वापस प्रचार कर सकते हैं (यह आपके लिए एक समाधान नहीं हो सकता है) BigDecimal करने के लिए। यह शायद BigDecimals पर गणना करने से तेज होगा। कई मामलों में वर्गों की गणना करने में अपरिहार्य त्रुटि की तुलना में प्रकारों के बीच रूपांतरण के कारण परिशुद्धता का नुकसान नगण्य होगा।

संबंधित मुद्दे