Forum: Compiler & IDEs Kommazahlenarithmetik


von aeiou (Gast)


Lesenswert?

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
von Falk B. (falk)


Lesenswert?

@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.

von Oliver S. (oliverso)


Lesenswert?

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

von Werner (Gast)


Lesenswert?

aeiou schrieb:
> Jetzt will ich Kommazahlen verwenden.

Brauchst du das Komma oder den Dynamikbereich von Fließkommazahlen?

von aeiou (Gast)


Lesenswert?

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?

von Oliver (Gast)


Lesenswert?

Ganz einfach: Du liest in deinem C-Buch das Kapitel zu 
Fließkommaarithmetik und den dazugehörigen Datentypen.

Oliver

von Hmm (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@  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.?"

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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"?

von aeiou (Gast)


Lesenswert?

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!

von Oliver S. (oliverso)


Lesenswert?

aeiou schrieb:
> Also in der Bibliothek, die ich bekommen habe, gibt es sicher keine
> Komazahlen.


Dann mal genauer: Welche Bibliothek hast du bekommen?

Oliver

von fonsana (Gast)


Lesenswert?

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

von aeiou (Gast)


Lesenswert?

Nein eben nicht
Wir haben nichts mit der Bibliothek gearbeitet. Bis.jetzt

von Falk B. (falk)


Lesenswert?

@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!

von Falk B. (falk)


Lesenswert?

@  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?

von Simon H. (simi)


Lesenswert?

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

von aeiou (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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 
:-)

von aeiou (Gast)


Lesenswert?

Danke.für eure Hilfe. Das Problem sich erledigt

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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?

von Frettchen (Gast)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.