2009-07-04 13 views
22

आज मैं सिर्फ कुछ कोड में एक फ़्लोटिंग पॉइंट अपवाद को ट्रैक कर रहा था जिसे मैंने अभी लिखा था। इसे खोजने में थोड़ा समय लगा क्योंकि यह वास्तव में एक पूर्णांक मोड शून्य लेने के कारण हुआ था। स्पष्ट रूप से कुछ भी शून्य शून्य करने के लिए परिभाषित नहीं किया जा रहा है, लेकिन मैंने सोचा कि यह अजीब था कि त्रुटि इतनी भ्रामक थी। सी ++ मॉड्यूलो ऑपरेटर के भीतर यह क्या है जो दो पूर्णांक के लिए फ़्लोटिंग पॉइंट का उपयोग करेगा? (मैं जीसीसी 4.3.2 का उपयोग कर रहा हूं)बी बी शून्य होने पर एसआईजीएफपीई का उत्पादन क्यों करता है?

त्रुटि का प्रदर्शन करने के लिए यहां एक सरल कार्यक्रम है।

int main() 
{ 
    int a=3,b=0; 
    int c=a%b; 
    return 0; 
} 

उत्तर

33

आपरेशन चलाता है SIGFPE:

SIG संकेत नाम के लिए एक आम उपसर्ग है; एफपीई फ्लोटिंग-पॉइंट अपवाद के लिए एक संक्षिप्त शब्द है। हालांकि एसआईजीएफपीई में फ्लोटिंग-पॉइंट अंकगणित शामिल नहीं है, बिना किसी पिछड़े संगतता को तोड़ने के बिना अपना नाम बदलने का तरीका नहीं है।

GDB इस बारे में थोड़ा स्पष्ट है और "अंकगणित अपवाद" यह कहता है:

(gdb) run 
Starting program: /home/emil/float 

Program received signal SIGFPE, Arithmetic exception. 
0x0804837d in main() at float.c:4 
4   int c=a%b; 
9

this page पर एक नज़र डालें।

अपने प्रश्न के लिए

प्रासंगिक हिस्सा:

SIG संकेत के नाम के लिए एक आम उपसर्ग है; एफपीई फ़्लोटिंग-पॉइंट अपवाद के लिए एक संक्षिप्त शब्द है। हालांकि एसआईजीएफपीई में फ्लोटिंग-पॉइंट अंकगणित शामिल नहीं है, फिर भी पिछड़ा संगतता तोड़ने के बिना अपना नाम बदलने का कोई तरीका नहीं है।

संबंधित मुद्दे