/ / कैसे जांचें कि क्या एक विशाल फ्लोटिंग पॉइंट नंबर एक पूर्णांक है? - सी ++, सी, फ्लोटिंग-पॉइंट, टाइप-रूपांतरण

कैसे जांचें कि एक विशाल फ़्लोटिंग पॉइंट नंबर एक पूर्णांक है या नहीं? - सी ++, सी, फ्लोटिंग-पॉइंट, टाइप-रूपांतरण

मेरे पास एक बहुत बड़ा फ्लोटिंग पॉइंट नंबर है (आसपास)20 अंक) और मैं यह जांचना चाहता हूं कि यह पूर्णांक है या नहीं। उदाहरण के लिए, यदि मेरे पास 154.0 जैसी संख्या है तो यह पूर्णांक है जबकि 154.123123 पूर्णांक नहीं है।

मुझे बहुत बड़े फ्लोटिंग पॉइंट की जाँच करने की आवश्यकता हैसंख्या (20 अंक या अधिक) जिसका अर्थ है कि मैं पहले इसे एक लंबे लंबे डेटाटाइप में बदल सकता हूं और देख सकता हूं कि क्या वे दोनों समान हैं। कृपया मुझे सही दिशा में भगाएं। मैं केवल C / C ++ में उत्तर की सराहना करता हूं। :)

उत्तर:

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

खैर, क्या "विशाल" है? यदि संख्या वास्तव में इस अर्थ में बहुत बड़ी है कि अंकों की संख्या आपके फ्लोटिंग-पॉइंट नंबर के मंटिसा द्वारा दर्शाई गई संख्या से अधिक है, तो आपका फ्लोटिंग-पॉइंट नंबर है हमेशा पूर्णांक।

उदाहरण के लिए, IEEE 754 डबल-सटीक प्रारूपएक 52-बिट मंटिसा है, जो लगभग 16 दशमलव अंकों के लिए पर्याप्त है। यदि आपके संख्याओं में 20 दशमलव अंक हैं, तो ऐसी संख्याओं को एक में निचोड़ने का कोई भी प्रयास double प्रभावी रूप से "पूर्णांकों" में अपनी संख्याओं को बदलकर गोलाई में परिणाम होगा।

आप उल्लेख करते हैं कि आपके नंबर फिट होने के लिए बहुत बड़े हैं long long डाटा प्रकार। यदि आप 64-बिट की बात कर रहे हैं long long डेटाटाइप, तो इसका स्वचालित रूप से मतलब है कि आपकी संख्या इतनी बड़ी है कि विशिष्ट रूप से प्रतिनिधित्व करने पर उनका कभी कोई अंश नहीं होगा double प्रकार, यानी वे हमेशा "पूर्णांक" होंगे यदि प्रतिनिधित्व करते हैं double मान।

अनुलेख क्या आप एक अतिरिक्त-विस्तृत मंटिसा के साथ कुछ विदेशी फ्लोटिंग-पॉइंट प्रकार का उपयोग कर रहे हैं?


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

बस परीक्षण है कि क्या x == floor(x)?