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
:
Gesperrt durch Moderator
@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
aeiou schrieb: > Jetzt will ich Kommazahlen verwenden. Brauchst du das Komma oder den Dynamikbereich von Fließkommazahlen?
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?
Ganz einfach: Du liest in deinem C-Buch das Kapitel zu Fließkommaarithmetik und den dazugehörigen Datentypen. Oliver
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.?"
Falk Brunner schrieb: > 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"?
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.