Hallo :)
Ich habe von meinem Lehrer ein Mainboard eines Roboters mit einem ATMEGA
32 bekommen.
Ich arbeite mit WinAVR.
Jetzt will ich Kommazahlen verwenden. Könnt ihr mir eine Bibliothek mit
Fließkommaarithmetik empfehlen (mit Downlaodlink)?
Danke für eure Hilfe
@aeiou (Gast)
>Ich habe von meinem Lehrer ein Mainboard eines Roboters mit einem ATMEGA>32 bekommen.>Ich arbeite mit WinAVR.
Schön. Weißt du was das ist? Ein ausgewachsener C-Compiler.
>Jetzt will ich Kommazahlen verwenden.
Punkt, Punkt, Komma, Strich. Fertig ist das Mondgesicht. ;-)
> Könnt ihr mir eine Bibliothek mit>Fließkommaarithmetik empfehlen (mit Downlaodlink)?
Ist im WinAVR schon drin. Nennt sich Fließkomma. Wird aber nur selten
benötigt. Günstiger ist oft Festkommaarithmetik.
Falk Brunner schrieb:> Ist im WinAVR schon drin.
Jein. Ist dabei, aber nicht unbedingt "drin". Drin ist es erst, wenn mit
Option -lm gelinkt wird.
Oliver
Ich möchte eine Division x/y durchführen. Dabei kann eben eine Kommazahl
herauskommen. Dafür brauche ich die Kommazahlen.
Also in der Bibliothek, die ich bekommen habe, gibt es sicher keine
Komazahlen.
Ich verwende eine Portable Version von WinAVR in Verbindung mit
Programmers Notepad.
Und falls es geht, wie kann ich die ahlen einschalten?
Und wenn Du nochmal "Kommazahlen" schreibst, gibt's Weihnachten keine
Geschenke. :-)
Das sind reelle Zahlen in der Mathematik und Fliesskomma- oder
Festkommazahlen in der Informatik.
aeiou schrieb:> Ich möchte eine Division x/y durchführen. Dabei kann eben eine Kommazahl> herauskommen. Dafür brauche ich die Kommazahlen.
Nicht unbedingt.
Wenn ich 13 Euro unter 4 Personen aufteilen muss, dann kann ich
natürlich rechnen
13.0 / 4.0 = 3.25 Euro
Ich kann aber genausogut sagen: Ich hab gar nicht 13 Euro sondern 1300
Cent. Dann kriegt jeder
1300 / 4 = 325 Cent
Durch den Übergang von Euro auf Cent hab ich also automatisch 2
'Nachkommastellen' bekommen, ohne deswegen gleich mit Kommazahlen dem
ganzen zuleibe rücken zu müssen.
Und dasselbe Prinzip kann ich im Grunde immer anwenden. Wenn ich mit
Temperturen rechne, dann rechne ich eben nicht mit ganzen Grad sondern
ich rechne mit zb Hunderstel-Grad. Man kann sich immer eine bestimmte
und definierte Anzahl an 'Nachkommastelle' einführen, indem man einfach
mit einem geeignetem Vielfachen rechnet. Bei Euros hat das Ding schon
einen Namen, nämlich Cent. Aber darauf kommts ja nicht an. Namen sind
Schall und Rauch und keiner kann mir verbieten, 13 Torten unter 4
Kindern aufzuteilen, in dem ich mit 100 Tortenstücke pro Torte rechne
und ausrechne, wieviele derartige Tortenstücke jedes Kind bekommt. Für
Ausgabezwecke kann ich immer noch die Dinge zusammenfassen und die 325
Tortenstücke als 3 ganze Torten und 25 lose Stücke an die Anzeige
schreiben. Mache ich das indem ich zwischen die ganzen Torten und die
übrig gebliebenen Stücke ein ',' (oder einen '.') schreiben lasse, dann
steht am LCD 3.25 und kein Mensch merkt, dass ich in Wirklichkeit immer
nur mit ganzen Zahlen gearbeitet habe und nicht mit Kommazahlen.
@ Karl Heinz Buchegger (kbuchegg) (Moderator)
>Ich kann aber genausogut sagen: Ich hab gar nicht 13 Euro sondern 1300>Cent. Dann kriegt jeder> 1300 / 4 = 325 Cent
Karl Heiz, dein Ethusiasmus in allen Ehren, aber er ist vor allem HIER
eher kontraproduktiv und pädagogisch eher wertlos.
All das steht HAARKLEIN im Artikel Festkommaarithmetik. Das muss man
nicht jedem faulen Fragesteller immer wieder mundgerecht vorlesen.
Beitrag "Einheitlicher Umgang mit faulen Schülern etc.?"
Nur um das klarzustellen:
Ich bin.kein. fauler Schüler. Mein Team wurde bei RoboCup Junior
weltweit 3er.
Ich bin nur dabei die Entwicklung meines Mentors (freiwillig ohne
Benotung!) Zu erweitern.
Und deswegen habe ich gefragt!
aeiou schrieb:> Also in der Bibliothek, die ich bekommen habe, gibt es sicher keine> Komazahlen.
Dann mal genauer: Welche Bibliothek hast du bekommen?
Oliver
aeiou schrieb:> Nur um das klarzustellen:> Ich bin.kein. fauler Schüler. Mein Team wurde bei RoboCup Junior> weltweit 3er.
Dann gibt es in Deinem Team auch jemanden, der das kann.
fonsana
@aeiou (Gast)
>Nur um das klarzustellen:>Ich bin.kein. fauler Schüler. Mein Team wurde bei RoboCup Junior>weltweit 3er.
Dein Team? Was hast dort gemacht ? Kaffee gekocht? Ist sicher auch
wichtig, um die Moral der Truppe zu halten, hat aber mit Programmierung
rein gar nichts zu tun ;-)
Don't feed the troll!
@ Johann L. (gjlayde) Benutzerseite
>> Beitrag "Einheitlicher Umgang mit faulen Schülern etc.?">Gibt's denn auch>- "Einheitlicher Umgang mit faulen Ingenieuren"?>- "Einheitlicher Umgang mit faulen Entwicklern"?>- "Einheitlicher Umgang mit faulen Informatikern"?>- "Einheitlicher Umgang mit faulen Programmierern"?>- "Einheitlicher Umgang mit faulen Lesern"?
Hmmm, was will mir dieser Beitrag sagen?
Vielleicht noch eine Ergänzung zum von Karl Heinz Geschriebenen,
vielleicht wird es so noch etwas klarer:
Stell Dir vor, Du hast eine 7-Segment Anzeige mit fünf Stellen.
Damit kannst du Zahlen zwischen 0 und 99999 darstellen. Stimmts?
Nicht unbedingt. Du kannst ja irgendwo 'nen Dezimalpunkt setzen. Also
kannst Du auch bestimmen, dass Du 0-99.999 darstellen kannst.
Mit Binärzahlen ist's nun genau das selbe. Nur dass die Wertigkeit der
einzelnen Digits nicht zehn, sondern zwei beträgt.
Also: 12345 = 1*10000 + 2*1000 + 3*100 + 4*10 + 5*1
Oder: 123.45 = 1*100 + 2*10 + 3*1 + 4*0.1 + 5*0.01
Beide Wertebereiche (mit der entsprechenden Auflösung) kannst Du mit
fünf Stellen darstellen.
Nun das ganze in Binär:
10010 = 1*16 + 0*8 + 0*4 + 1*2 + 0*1
oder:
100.10 = 1*4 + 0*2 + 0*1 + 1*0.5 + 0*0.25
Mit fünf Bit kannst Du also entweder Zahlen zwischen 0 und 31 (unsigned)
darstellen, oder eben Zahlen zwischen 0 und 7, dafür mit einer Auflösung
von 0.25
Fazit:
Kommazahlen --> Fliesskomma-Arithmetik ist ein Fehlschluss. Es heisst ja
nicht umsonst FLIESSkomma-Arithmetik, und nicht KOMMA-Arithmetik. Der
Trick der Fliesskomma-Arithmetik ist, den Dynamikbereich der
Zahlengrösse anzupassen. Mit "Kommazahlen" hat das überhaupt nichts zu
tun.
Wenn wir nochmals das Bild mit der 7-Segment Anzeige hernehmen, heisst
Fliesskomma-Arithmetik, dass Du den Dezimalpunkt irgendwo setzen kannst
(auch 100 Stellen links oder rechts von der Anzeige - die Nullen musst
Du Dir dann halt dazudenken). Bei Festkommaarithmetik ist der Dezimal-
resp. "Binärpunkt" einfach immer am selben Ort.
Wenn Du Dich jetzt fragst: "Ja, aber wie sage ich dem uC, wo der
Binärpunkt ist?", lautet die Antwort: Gar nicht. Den Punkt auf der
7-Segment-Anzeige kannst du ja auch einfach fest verdrahten und "12345"
als eine "123.45" interpretieren. Du als Programmierer musst einfach
wissen, wie Du die Bitfolge 10010 interpretieren willst.
Aber aufpassen bei Multiplikationen und Divisionen! Nimm ein Blatt
Papier, mach ein paar triviale Multiplikationen in Dezimal, dann siehst
Du gleich, was Du im Binärsystem machen musst (genau dasselbe wie im
Dezimalsystem).
Gruäss
Simon
Es war so: da ich erst 15 bin.und im.Vorjahr wenig Routine mit
Programmierung g hatte,bekam.ich eine Bibliothek die.mir Fertige
funktionen für Sensoren und Aktoren liefert, damit ich nicht direkt denn
Mikroprozessor programmieren muss.
Ab heuer beginne ich eben mich in diese Bibliothek einzuarbeiten.
Wenn es euch.interresiert ist hier der link zur Webseite des Systems:
robotik.brgkepler.at
Dort dann der Punkt KeplerBrain.
aeiou schrieb:> Es war so: da ich erst 15 bin.und im.Vorjahr wenig Routine mit> Programmierung g hatte,bekam.ich eine Bibliothek die.mir Fertige> funktionen für Sensoren und Aktoren liefert, damit ich nicht direkt denn> Mikroprozessor programmieren muss.
Alles schön und gut.
Aber das hat ja nichts damit zu tun, ob und wie du Unterstützung für
Floating Point bekommst.
Floating Point ist eine Basissache der Programmiersprache C, hat also
erst mal nichts mit deiner Seonsoren-Bibliothek zu tun. Und auf machen
Systemen reicht es nicht, einfach nur den Datentyp float zu verwenden,
sondern man muss auch noch die Floating Point Library mit dazulinken.
Die Angabe von -lm macht beim WinAvr genau das und wird im makefile beim
Linker ergänzt.
Allerdings erhebt sich dann aber auch sehr oft die Frage: Braucht man
überhaupt Floating Point? Denn für einen AVR ist, anders als am PC, die
Verarbeitung von Floating Point Zahlen ein Kraftakt, den er "zu Fuss"
erledigen muss während ein PC dafür eigene Hardware hat.
Floating Point kann sinnvoll sein, so ist das dann auch wieder nicht.
Aber oft gibt es auch Alternativen. Zumal Floating Point Arithmetik auch
kein Allheilmittel ist, sondern wieder einen neuen Sack Flöhe aufmacht
:-)
aeiou schrieb:> Danke.für eure Hilfe. Das Problem sich erledigt
Soso.
Ist Dir jetzt die Diskussion über den Kopf gestiegen, so dass Du
möglichst schnell den Thread vergessen willst oder hast Du tatsächlich
eine Lösung?
Wenn ja, welche?
Frank M. schrieb:> Ist Dir jetzt die Diskussion über den Kopf gestiegen, so dass Du> möglichst schnell den Thread vergessen willst oder hast Du tatsächlich> eine Lösung?
Lieber Frank,
dies ist dein erster Post zum Thema hier und du hast zuvor nichts zur
Erhellung beigetragen. Wenn du nichts Fachliches zu sagen hast, dann
behalte dein Gesülze für dich.
Frettchen schrieb:> Frank M. schrieb:>> Ist Dir jetzt die Diskussion über den Kopf gestiegen, so dass Du>> möglichst schnell den Thread vergessen willst oder hast Du tatsächlich>> eine Lösung?>> Lieber Frank,> dies ist dein erster Post zum Thema hier und du hast zuvor nichts zur> Erhellung beigetragen. Wenn du nichts Fachliches zu sagen hast, dann> behalte dein Gesülze für dich.
Das gleiche dürfte wohl für dich gelten...
Zumal die Frage von Frank durchaus naheliegend ist.
Im ersten Antwortpost steht schon alles nötige drin. Mit Google und/oder
einem beliebigen C-Buch kommt man dann ans Ziel. Drum mache ich den
Laden hier dicht.