Hallo, Wenn ich beim AVR bisher Zahlen mit Kommastellen die relevant waren hatte, habe ich die Zahl mit 10^x Multipliziert und dann bei der AUsgabe das Komma richtig gesetzt. Nun muss ich bei einer Berechnung einen Kehrwert einer Zahl > 1 bilden. Da kommt dann ja Zwangslaeufig was < 1 mit Komma raus. Wie kann ich das im AVR Speichern? Wuerde sowas gehen? x=879; y = (1/x)*1000; Ich denke da wuerde 0 rauskommen da der erste Teil der Multi 0 ist, richtig? Gruss H:V
Einfach umformen in y = (10^e / x); in deinem Beispiel: x = 879; y = 1000/879; dann ist y = 1; dargestellt mit deinem um 1000 verschobenen dezimalpunkt: 0.001; Für mehr genauigkeit: y = 1000000 / 879; // Achtung, 32bit int nötig! y == 1137; // entspricht 0.001137 /Ernst
1 | int x = 879; |
2 | int y = (1/x) * 1000; // geht nicht, Ergebnis = 0 |
3 | float y = (1/(float)x) * 1000; // geht |
4 | float y = (1.0/x) * 1000; // geht auch |
@Ernst - hm einfach - da haette ich auch selber draufkommen muessen peinlich Danke @ Stefan Gibt es im AVR GGC denn float? Gruss
> Gibt es im AVR GGC denn float?
Ja, gibt es.
Wenn es aber nicht unbedingt sein muss, verwende es
nicht.
Karl heinz Buchegger wrote: > Wenn es aber nicht unbedingt sein muss, verwende es > nicht. Kann man so allgemein auch nicht sagen. Hängt einfach von der Aufgabe und den verfügbaren Ressourcen ab. Wenn die Plattform ohnehin ein nur zu 20 % ausgelasteter ATmega128x ist und der Rechenzeitbedarf keine Rolle spielt, warum nicht? Es macht ja zumindest Dinge einfacher und übersichtlicher, ergo vermeidet es Bugs. Für den ungenutzten ROM bekommst du von Atmel auch kein Geld zurück. ;-) Eine andere Epsiode, wo floats besser als scaled integers funktionieren, hat Luke Morrison hier aufgeschrieben: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=43970#271216 Klar, es hätte nicht unbedingt sein müssen, war aber letztlich die bessere Lösung.
> Kann man so allgemein auch nicht sagen. Agreed :-) (Um auch mal etwas internat. Flair in das Forum zu bringen) > Hängt einfach von der Aufgabe und den verfügbaren Ressourcen ab Klar. Hängt aber auch davon ab, ob der Programmierer weiss, welchen Sack von möglichen Problemen er mit float aufmacht. Speziell mit float, double ginge ja noch. Ich hab schon so manche Stunde über double Berechnungen gebrütet und Formeln wie wild umgestellt, Verfahren gewechselt, um Rechenungenaugkeiten in den Griff zu kriegen. (Ich komme aus der CAD Ecke. Ein schleifender Schnitt 2-er Geraden ist so ziemlich das Heimtückischte und Eckelhafteste was man sich vorstellen kann). Man sollte besser sagen: float bzw. double ist auch kein Allheilmittel. Und da rede ich noch nicht mal von der auf AVR verringerten Rechengeschwindigkeiten. Mit 5, 6, 7 Stellen Genauigkeit ist halt schnell Schluss mit lustig.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.