2011-09-21 9 views
7

में नाव मूल्यों के लिए% ऑपरेटर का उपयोग कैसे करें। मैं पूर्णांकों दर्ज करना चाहते हैं केवल मूल्य ही है लेकिन संख्याएं बहुत बड़ी हैं (इंट प्रकार की सीमा में नहीं) ताकि असुविधा से बचने के लिए मैं फ्लोट का उपयोग कर सकूं। क्या ऐसे बड़े पूर्णांक मानों पर% ऑपरेटर का उपयोग करने का कोई तरीका है ????जब मैं नाव मूल्यों पर% ऑपरेटर का उपयोग करते हुए कहा कि मैं "बाइनरी% करने के लिए अमान्य operands ('नाव' और 'डबल' है)" त्रुटि मिलती है ग

+0

तो 1.5% 1.1 = 0.4? – StuartLC

+0

हाँ मॉड्यूलो डिवीजन ए = बी% सी; काम नहीं करेगा, क्योंकि आप दशमलव द्वारा दशमलव को विभाजित करके शेष नहीं प्राप्त कर सकते हैं। –

उत्तर

11

आप मानक गणित पुस्तकालय से fmod फ़ंक्शन का उपयोग कर सकते हैं। इसका प्रोटोटाइप मानक शीर्षलेख <math.h> में है।

+2

+1 ... लेकिन [fmod] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/fmod.html) का लिंक अच्छा रहा होगा :) – pmg

+1

@pmg: ऐसा नहीं है कि हम क्यों अन्य लोगों की पोस्ट को संपादित करने की अनुमति है? :) –

+0

@ एसएसएस: निश्चित रूप से! – cyco130

5

आप शायद long long का उपयोग कर बेहतर हैं, जो अधिकांश सिस्टम में double से अधिक सटीकता है।

नोट: यदि आपकी संख्या long long से अधिक बड़ी हो सकती है, तो fmod संभवतः उस तरीके से व्यवहार नहीं करेगा जैसा आप चाहते हैं। उस स्थिति में, आपकी सर्वश्रेष्ठ शर्त एक बड़ी लाइब्रेरी है, जैसे this one

+0

BigIntegerLibrary सी में स्वीकार नहीं किया जा रहा है ??? इसके अलावा बिग पूर्णांक के लिए% निर्दिष्टकर्ता क्या है ??? –

+0

क्षमा करें, मैंने जो लाइब्रेरी सुझाई है वह सी ++ है। –

0

पर विचार: 32 बिट और 64 बिट

के लंबे पूर्णांक int

हाँ,% (सापेक्ष) ऑपरेटर तैरता और डबल के साथ काम नहीं है .. यदि आप बड़ी संख्या में आप कर सकते हैं पर सापेक्ष आपरेशन करना चाहते हैं long long int(64bits) जांचें यह आपकी मदद कर सकता है।

अभी भी उस मामले में 64 बिट्स तो तुलना रेंज पिसाई यंत्र आप में .. स्ट्रिंग डाटा स्टोर और एल्गोरिदम रूप सापेक्ष आपरेशन करने की जरूरत है।

या या तो आप अजगर की तरह किसी भी पटकथा भाषा पर जा सकते हैं

4

% ऑपरेटर केवल पूर्णांक प्रकार ऑपरेंड के लिए परिभाषित किया गया है; आप फ्लोटिंग प्वाइंट प्रकार के लिए fmod* पुस्तकालय कार्यों का उपयोग करना होगा:

#include <math.h> 
double fmod(double x, double y); 
float fmodf(float x, float y); 
long double fmodl(long double x, long double y); 
0

आप लंबे किसी पूर्णांक उपयोग का उपयोग करने के लिए एक प्रारूप है कि आपकी समस्या के लिए गैर आदर्श है का उपयोग नहीं करना चाहते हैं, तो एक बेहतर प्रारूप मौजूद है।

0

जब मैं fmod या अन्य पुस्तकालयों के लिए आसान पहुँच नहीं किया है (उदाहरण के लिए, एक त्वरित Arduino स्केच कर रही है), मुझे लगता है कि निम्नलिखित काम करता है अच्छी तरह से:

float someValue = 0.0; 

// later... 

// Since someValue = (someValue + 1) % 256 won't work for floats... 
someValue += 1.0; // (or whatever increment you want to use) 
while (someValue >= 256.0){ 
    someValue -= 256.0; 
} 
संबंधित मुद्दे