Division durch 0



  • Hallo

    Zum compilieren des Folgenden Codes benutze ich den Compiler aufruf : "gcc -c test.c -DF_CPU=1000000UL"

    Nun als Ausgabe erhalte ich dann:
    test.c: In function ‘test’:
    test.c:19: warning: division by zero

    Wenn ich jedoch das ganze zuerst mit: "gcc -E test.c -DF_CPU=1000000UL" vom Preprozessor bearbeiten lasse und dann compiliere geht es wunderbar.

    Frage wo liegt mein Fehler ich finde ihn nicht.

    Danke schon mal für die Hilfe....

    edit:
    GNU C version 4.0.1

    #define PRESCALE 8
    // PERIOD TIME IN ms
    #define PERIOD 20
    // LOW-PART TIME of the PERIOD in ms
    #define L_PERIOD 18 
    // HIGH-PART TIME of the PERIOD in ms
    #define H_PERIOD PERIOD-L_PERIOD
    
    #define ICR (((PERIOD/1000)/(1/(F_CPU/PRESCALE)))/2)
    
    void test(void) {
    
    	int test = ICR;
    
    }
    


  • Du dividierst doch auch durch 0.

    1/(F_CPU/PRESCALE) ergibt mit den eingesetzten Werten 0.



  • bei einer division durch 0 kann es zu einem internen fehler innerhalb der CPU kommen, bei dem elektrische Leitungen schmilzen und einen Kurzschluß verursachen können. Immer den Feuerlöscher bereithalten!



  • Mit euren beide Beiträgen wäre ich genau soweit wie vorher....

    Wobei mir man jetzt schongesagt hat des es an der Integer..Integer Division liegt....

    lg mike



  • Integer-Integer Division bedeutet, dass ein Integer rauskommt.
    Ob gerundet oder abgeschnitten wird, ist mehr oder weniger egal.

    1 / 0 = Division by Zero
    1 / |1| = |1|
    1 / |2| ergibt |0.5| Bei Rundung ist das 1, bei Cut 0 => Mögliches Problem
    1 / |3| ergibt |0.3333...| -> egal wie: 0 => Problem

    Verstanden ?

    mfg branleb



  • Dem könnte man vorbeugen durch Cast eines Operanden (einer reicht) nach float oder double.



  • Danke, aber gelöst ist das Problem ja schon (Wie ich weiter oben geschrieben habe....)

    Ich habe einfach alle Divisor auf float gecasted...

    lg mike


Anmelden zum Antworten