जब मैं 32-बिट पावरपीसी कर्नेल में नीचे दिए गए C++ प्रोग्राम को चलाता हूं जो सॉफ़्टवेयर फ़्लोटिंग इम्यूलेशन (हार्डवेयर फ्लोटिंग पॉइंट अक्षम) का समर्थन करता है, तो मुझे गलत सशर्त मूल्यांकन मिलता है। क्या कुछ मुझे बता सकते हैं कि यहां संभावित समस्या क्या है?गलत फ़्लोटिंग पॉइंट व्यवहार
#include <stdio.h>
int main() {
int newmax = 1;
if ((newmax + 0.0) > 256) {
printf("\nShouldn't be here\n");
} else {
printf("\nShould be here\n");
}
}
संकलित: लक्ष्य सिस्टम में
powerpc-linux-g++ -msoft-float -c floating.cxx
powerpc-linux-g++ -o floating floating.o
आउटपुट:
[linux:/]$ ./floating
Shouldn't be here
क्या आप मुझे बता सकते हैं कि कर्नेल क्या है? मेरा सबसे अच्छा अनुमान यह है कि इसका अनुकरण किसी भी तरह फ्लोटिंग पॉइंट मानक का पालन नहीं करता है, जिसमें शून्य का अचूक प्रतिनिधित्व होता है। साथ ही, ध्यान रखें कि 0.0 डिफ़ॉल्ट रूप से डिफ़ॉल्ट है, तैरने के लिए नहीं। शायद आपका सॉफ़्टवेयर एमुलेटर डबल का समर्थन नहीं करता है। – speeder
आपको लिंक करते समय -मोफ्ट-फ्लोट भी निर्दिष्ट करना चाहिए। –
@ स्पीडर। यह एक कस्टम 2.6.32.5 9 कर्नेल है। मुझे भी संदेह है कि यह कर्नेल में एक सॉफ्टवेयर इम्यूलेशन मुद्दा हो सकता है। – rajachan