मेरा C ++ में एक प्रोग्राम है (g ++ का उपयोग करके संकलित)। मैं मॉडुलस फ़ंक्शन में ऑपरेंड के रूप में दो डबल्स लागू करने की कोशिश कर रहा हूं, लेकिन मुझे निम्न त्रुटि मिलती है:
त्रुटि: 'डबल' और बाइनरी 'ऑपरेटर%' के 'डबल' प्रकार के अमान्य ऑपरेंड
यहाँ कोड है:
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
@ सुपरकार अधिक विवरण भयानक होगा। मुझे लगता है कि पर्दे के पीछे क्या है इसका एक विचार है जिसके कारण आप सच कहते हैं, लेकिन यह अच्छा होगा कि आप जो कहते हैं उसके कारणों को देखें; यह देखना दिलचस्प होगा कि यह पर्दे के पीछे कैसे काम करता है (मुझे लगता है कि मैं समझता हूं लेकिन बहुत आसानी से गलत हो सकता है)।
—
रस्ताजेडी
फ्लोटिंग-पॉइंट वैल्यू दो के अधिकारों के सटीक पूर्णांक गुणकों या भिन्न का प्रतिनिधित्व करते हैं। उदाहरण के लिए, पूर्णांक शाब्दिक 0.1 वास्तव में 3602879701896397/36028797018963968 है (बाद वाला मान दो की एक शक्ति है)।
—
सुपरकैट
fmod(x,0.1)
संख्यात्मक मान "एक दसवें" से विभाजित करने के बजाय, उस सटीक अंश से x को विभाजित करेंगे और शेष भाग लेंगे।
संभव डुप्लिकेट: मापांक विभाजन (%) केवल पूर्णांक के साथ क्यों काम करता है?
—
पॉल आर
fmod
अप्रत्याशित व्यवहार हो सकता है। उदाहरण के लिए,fmod(1, 0.1);
गणितीय रूप से शून्य होना चाहिए, लेकिन वास्तव में लगभग 0.1 होगा। त्रुटि की सीमा भागफल के परिमाण के साथ बढ़ जाती है। उदाहरण के लिए,fmod(9E14, 0.1);
लगभग 0.05 का मूल्यांकन करता है, जो कि गणित के दृष्टिकोण से सीधे सादे गलत है।