Gast
#1371752
Hallo, für mein Projekt benutze ich eine kleine selbst geschriebene Fixed-Point Bibliothek um Berechnungen im Format s15.16 durchführen zu können. Bisher dachte ich eigentlich, dass diese gut funktionieren würde, doch heute ist mir per Zufall aufgefallen, dass der Precompiler vorgegebene Werte teilweise recht ungenau konvertiert. Zur Konvertierung nutze folgende Typendefinition und ein entsprechendes Makro:
1 | |
2 | |
3 | |
Wenn ich nun z.B. 693,0983 konvertieren möchte und das durch den AVRStudio Simulator jage, liefert mir dieser als Ergebnis 0x02B5192C bzw. dezimal 45422892. Wenn ich das nun aber per Hand ausrechne bekomme ich 693,0983 * 65536 = 45422890,1888. Nach Abschneiden der Nachkommastellen ergibt das allerdings eine Differenz von 2! Obwohl es mir logisch erscheinen würde, dass der Precompiler ebenfalls die Stellen abschneidet, gebe es selbst im Fall dass er aufrundet immer noch einen Unterschied von 1! Wie ist dieses Verhalten zu erklären? Prinzipiell sollte eine einfache Multiplikation von zwei solch gutmütigen Zahlen (beide in etwa in der gleichen Größenordnung) doch nicht derartig ungenau sein! Kann jemand dieses Verhalten reproduzieren oder hab ich vielleicht irgendwo anders einen Fehler? Achja, das ganze habe ich mit dem neuesten WinAVR-20090313 kompiliert. Vielen Dank im voraus! Gruß, krischi