mikrocontroller.net

Forum: Compiler & IDEs Kehrwert bilden?


Autor: Hr Vorragend (hr_vorragend)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int x = 879;
int y = (1/x) * 1000;          // geht nicht, Ergebnis = 0
float y = (1/(float)x) * 1000; // geht
float y = (1.0/x) * 1000;      // geht auch

Autor: Hr Vorragend (hr_vorragend)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Ernst - hm einfach - da haette ich auch selber draufkommen muessen 
peinlich

Danke

@ Stefan
Gibt es im AVR GGC denn float?


Gruss

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Gibt es im AVR GGC denn float?

Ja, gibt es.
Wenn es aber nicht unbedingt sein muss, verwende es
nicht.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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&f...

Klar, es hätte nicht unbedingt sein müssen, war aber letztlich die
bessere Lösung.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.