mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fließkommarechnung mit Atmega8 funktioniert nicht


Autor: Mani (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe ein Problem undzwar, hab ich folgendes in AVR-GCC für den 
Atmega8 Programmiert:
Bsp:

float test;
float test2;

test=1/2*1000;
test2=1000/2;

eigentlich sollte bei beiden das gleiche rauskommen, allerdings kommt 
bei "test" 0 raus und bei "test2" kommt 500 raus.

dasheißt das 1/2 rechnet er mit 0 einfach, aber genau deshalb hab ich ja 
float gewählt das er auch kommastellen habe.

Hat jemand ne Idee wieso das nicht funktioniert?

Vielen Dank

Mani

Autor: sunday morning (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

er scheint die zahlen ganz eindeutig als Ganzzahlen zu behandeln.

Das würde das Ergebnis erklären:
denn 1000 / 2 = 500
und 1 /2 = 0 * 1000 = 0 (wuerde Integer maessig auch so passen)

Deshalb multipliziert man auch zuerst bei Integer Zahlen und dividiert 
dann.
test=1/2*1000;
test2=1000/2;

Vielleicht musst du die Benutzung von float noch irgendwo aktivieren? 
Aber bist du dir sicher, dass du auf einem 8 Bit Controller mit 
Fliesspunkt KOmma Rechnen willst? Das ist sehr rechenintensiv.

Such mal nach Fixpoint!

Schönen Sonntag noch :-)

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mani wrote:
> test=1/2*1000;
> test2=1000/2;
Das auf der rechten Seite vom "=" sind alles ganze Zahlen, und 
dementsprechend werden die auch als solche behandelt. Wenn in einem 
anderen Datentyp gerechnet werden soll, dann muss man mindestens einen 
der beteiligten Werte als Gleitkommazahl schreiben.
test=1/2.0*1000;
Allerdings sollte man sich bei der Anwendung von Gleitkommaoperationen 
immer bewusst sein, dass da viele Ressourcen draufgehen. In den meisten 
Fällen ist man mit Festkommaarithmetik besser bedient.

BTW:
Es heißt Gleitkomma und nicht "Fließkomma" (engl. to float: gleiten)

Autor: Mani (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Perfekt Leute VIELEN VIELEN DANK!!!

Hätte mir einiges an sucherei gestern gespart, bin einfach nicht drauf 
gekommen Danke!!!

Das ich Festkomma statt Gleitkomma verwenden sollte, ist schon klar, ich 
brauch aber unbedingt Gleitkomma ... Leider :(

Danke nochmals!

Mani

Autor: Mani (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist, nämlich ohne Fließkomma würde ich auf 650000 kommen, 
und das ist selbst für einen unsigned long long zu viel :(
Gibts keine variablendeklaration die auch mehr als unsigned long long 
hat?

Autor: Mani (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, sorry unsigned long bzw. unsinged long long reichen natürlich 
vollkommen aus

Nur komischerweise funktioniert zwar long long aber long alleine reicht 
ned obwohl long ja um vieles mehr als 260000 hat.

Autor: Dirk als (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
???
Wo ist das Problem, schon unsigned long geht bis 4.294.967.295

Autor: Gaston (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Johannes M.

Anm deiner Aussage stimmen zwei Sachen wohl nicht:
>BTW:
>Es heißt Gleitkomma und nicht "Fließkomma" (engl. to float: gleiten)

Erstmal ist es nicht Gleitkomma, sondern sehr wohl Flieskomma
emgl. floating-point und Gleiten wäre in engl. glide.

Im übrigen könnte man auch einen C Compiler eine Flieskommazahl bekannt 
machen, in dem man einfach ein f inter der Zahl dranhängt z.B. :

test=1/2f*1000;

Grützli

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Erstmal ist es nicht Gleitkomma, sondern sehr wohl Flieskomma
>emgl. floating-point und Gleiten wäre in engl. glide.


Wenn man keine Ahnung hat...

Natürlich heißt to float auf Deutsch gleiten.
Fliessen heisst auf Englisch to flow.

Und sehr wohl heisst das auf Deutsch Gleitkommazahl...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Natürlich heißt to float auf Deutsch gleiten.
>Fliessen heisst auf Englisch to flow.

Seit wann müssen wir unsere Sprache aus dem Englischen ableiten?

Das "macht" doch keinen Sinn, das "macht" keinen Unterschied, nicht 
"wirklich", ...
Equal goes it loose.
Ach 'so etwa's gan's Wichtige's habe ich noch verge's'sen!

Autor: Machtnix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eben und deswegen sind sich da auch alle (un)einig was floating point 
nun bedeutet

h**p://www.dict.cc/?s=floating+point <- die müsstens wissen schätze ich
oder auch nicht und was wie so weshalb :-P

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um fließen zu können, müsste das Komma (bzw. der Punkt) erst mal flüssig 
sein. Man sollte auch mal über den Sinn eines Begriffes nachdenken. 
dict.leo.org sagt übrigens auch etwas anderes. Dort wird "to float" 
nirgends mit "fließen" übersetzt, was eigentlich auch korrekt ist. "to 
float" heißt eben gleiten, treiben, schwimmen usw. Die Übersetzung mit 
"fließen" ist im Prinzip schlicht falsch und rührt vermutlich 
tatsächlich von der Ähnlichkeit mit "to flow" her, was tatsächlich 
"fließen" heißt.

Gaston wrote:
> Im übrigen könnte man auch einen C Compiler eine Flieskommazahl bekannt
> machen, in dem man einfach ein f inter der Zahl dranhängt z.B. :
>
> test=1/2f*1000;
Man könnte das auch so machen. In diesem Falle führen selbst in C 
mehrere Wege nach Rom. Allerdings ist mein Lösungsvorschlag ebenfalls 
völlig korrekt.

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.