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
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.
1 | test=1/2*1000; |
2 | 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 :-)
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.
1 | 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)
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
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?
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.
??? Wo ist das Problem, schon unsigned long geht bis 4.294.967.295
@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
>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...
>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!
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
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.
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.