मैं जावा और सी/सी ++ दोनों में कई संदर्भ एल्गोरिदम कोडिंग कर रहा हूं। इनमें से कुछ एल्गोरिदम π का उपयोग करते हैं। मैं समान परिणामों को अलग-अलग गोल किए बिना, प्रत्येक एल्गोरिदम के दो कार्यान्वयन के लिए चाहूंगा। ऐसा करने का एक तरीका जिसने लगातार काम किया है, एक कस्टम-डिफ़ाइंड pi
स्थिरता का उपयोग करना है जो 3.1415 9 जैसे दोनों भाषाओं में बिल्कुल समान है। हालांकि, यह जावा और जीसीसी पुस्तकालयों में पहले से ही उच्च परिशुद्धता स्थिरांक परिभाषित होने पर पीआई को परिभाषित करने के लिए मूर्खतापूर्ण रूप से हमला करता है।क्या java.lang.Math.PI जीसीसी के एमएफआई के बराबर है?
मैंने कुछ समय तक त्वरित परीक्षण कार्यक्रम लिखने, प्रत्येक पुस्तकालय के लिए प्रलेखन को देखने और फ़्लोटिंग-पॉइंट प्रकारों पर पढ़ने के लिए कुछ समय बिताया है। लेकिन मैं खुद को यह समझाने में सक्षम नहीं हूं कि java.lang.Math.PI (या java.lang.StrictMath.PI) math.h में M_PI के बराबर है, या नहीं है।
जीसीसी 3.4.4 (cygwin) math.h शामिल हैं:
#define M_PI 3.14159265358979323846
^^^^^
लेकिन इस
printf("%.20f", M_PI);
3.14159265358979311600
^^^^^
जो पता चलता है कि अंतिम 5 अंक भरोसा नहीं किया जा सकता है का उत्पादन ।
इस बीच, Javadocs का कहना है कि java.lang.Math.PI है:
double
मूल्य कि करीब अनुकरणीय, करने के लिए एक चक्र की परिधि के अनुपात के लिए किसी भी अन्य है इसके व्यास।
और
public static final double PI 3.141592653589793d
जो निरंतर से संदिग्ध अंतिम पाँच अंक अस्वीकार करते हैं।
System.out.printf("%.20f\n", Math.PI);
पैदा करता
3.14159265358979300000
^^^^^
आप फ्लोटिंग प्वाइंट डेटा प्रकार में कुछ विशेषज्ञता है, तो आप मुझे समझा सकते हैं कि इन पुस्तकालय स्थिरांक बिल्कुल बराबर हैं? या वे निश्चित रूप से बराबर नहीं हैं?
सी में, आप डबल पीआई = एमएफआई कर सकते हैं; printf ("% lld \ n", pi); एक ही 64 बिट पूर्णांक प्राप्त करने के लिए: 4614256656552045848 –
धन्यवाद ब्रूनो, जो कि मूल प्रश्न का बहुत अधिक उत्तर देता है। – JeeBee