XBert
28.08.2010, 15:17
Hi,
Ich habe folgendes Problem und weiß nicht genau wie man es möglichst effizient lösen kann.
Es gibt eine Funktion die ein int16_t verlangt. Ich rufe sie folgendermaßen auf:
foo(((int32_t)x<<15)/y);
das Problem tritt auf, wenn x==y da dann 32768 übergeben wird was natürlich zu einem falschem Ergebnis führt.
Meine Lösungsversuche sind die:
foo(((int32_t)x*32767)/y);
foo(((int32_t)x<<15)/y-1);
Allerdings bin ich mit beiden Varianten nicht ganz glücklich da sie bei allen anderen Werten zu einem (kleinem) Fehler führen.
Hat jemand eine schlaue Idee dazu?
Und meine 2te Frage ist was passiert bei einer Division durch 0 auf einem AVR.
Mathematisch gesehen ist das ja nicht definiert, aber was passiert im µC?
LG
Ich habe folgendes Problem und weiß nicht genau wie man es möglichst effizient lösen kann.
Es gibt eine Funktion die ein int16_t verlangt. Ich rufe sie folgendermaßen auf:
foo(((int32_t)x<<15)/y);
das Problem tritt auf, wenn x==y da dann 32768 übergeben wird was natürlich zu einem falschem Ergebnis führt.
Meine Lösungsversuche sind die:
foo(((int32_t)x*32767)/y);
foo(((int32_t)x<<15)/y-1);
Allerdings bin ich mit beiden Varianten nicht ganz glücklich da sie bei allen anderen Werten zu einem (kleinem) Fehler führen.
Hat jemand eine schlaue Idee dazu?
Und meine 2te Frage ist was passiert bei einer Division durch 0 auf einem AVR.
Mathematisch gesehen ist das ja nicht definiert, aber was passiert im µC?
LG