लगभग किसी भी फ़्लोटिंग-पॉइंट ऑपरेशन या गणित लाइब्रेरी फ़ंक्शन जो गैर-NaN इनपुट से NaN उत्पन्न करता है, को 'अमान्य ऑपरेशन' फ़्लोटिंग-पॉइंट अपवाद को भी संकेत देना चाहिए; इसी तरह, एक गणना जो परिमित इनपुट से अनंतता उत्पन्न करती है, आमतौर पर 'विभाजित-शून्य-शून्य' या 'अतिप्रवाह' फ़्लोटिंग-पॉइंट अपवाद को सिग्नल करेगी। तो आप इन अपवादों को एक SIGFPE में बदलने का कोई तरीका चाहते हैं।
मुझे संदेह है कि उत्तर अत्यधिक सिस्टम-निर्भर होगा, क्योंकि फ़्लोटिंग-पॉइंट जाल और झंडे के नियंत्रण को जीसीसी द्वारा बजाए प्लेटफार्म सी लाइब्रेरी द्वारा आपूर्ति की जाने की संभावना है। लेकिन यहां एक उदाहरण है जो लिनक्स पर मेरे लिए काम करता है। यह fenv.h
से feenableexcept
फ़ंक्शन का उपयोग करता है। इस समारोह को घोषित करने के लिए _GNU_SOURCE
परिभाषित करना आवश्यक है।
#define _GNU_SOURCE
#include <fenv.h>
int main(void) {
double x, y, z;
feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
x = 1e300;
y = 1e300;
z = x * y; /* should cause an FPE */
return 0;
}
एक चेतावनी: मुझे लगता है यह कुछ सेटअप है कि अपवाद वास्तव में उत्पन्न नहीं कर रहा है के साथ संभव है कि (सिद्धांत में) यह कारण हो जाना चाहिए था एक के बाद अगले फ्लोटिंग प्वाइंट आपरेशन है, तो आप कभी कभी जब तक अपवाद को ट्रिगर करने के लिए नो-ऑप फ़्लोटिंग-पॉइंट ऑपरेशन (जैसे 1.0 द्वारा गुणा) की आवश्यकता है।
स्रोत
2010-06-01 11:49:33
'-fsignaling-nans' क्रम है, समय संकलन नहीं। – LiraNuna
आप किस प्रणाली पर हैं? –