Hallo meine Damen und Herren,
ich wollte fragen ob mir einer von euch sagen ob der Atmega256 mit 8-Bit
eine Festkommaarithmetik unterstüzt bzw. nen Link wie man dem Ding das
bei bringt. Habe jetzt schon den halben Tag gegoogelt, aber nichts
gefunden was ich entweder verstanden habe oder für sinnvoll hielt.
Des weiteren wollte ich mal fragen ob mir einer sagen kann für was in
nem C COde das L hinter ner Zahl steht.
z.B. if(i < 5000L) wenn ich nach c l google finde ich nich sonderlich
viel und auch das Wort programmierung bringt mich nicht gerade zur
Erklärung.
Freue mich üeber eure Hilfe.
Besten Dank!
@ Icke_Wa (Gast)
>ich wollte fragen ob mir einer von euch sagen ob der Atmega256 mit 8-Bit>eine Festkommaarithmetik unterstüzt
Sicher, wenn es sein muss auch 64 Bit.
> bzw. nen Link wie man dem Ding das>bei bringt.Festkommaarithmetik> Habe jetzt schon den halben Tag gegoogelt, aber nichts>gefunden was ich entweder verstanden habe oder für sinnvoll hielt.
Dann bist du entweder unfähig zu suchen oder faul oder schwer von
Begriff.
Der ERSTE Treffer bei Google bringt dich zum Artikel hier im Wiki!!!!
>Des weiteren wollte ich mal fragen ob mir einer sagen kann für was in>nem C COde das L hinter ner Zahl steht.
L wie Long, was beim AVR GCC einer vorzeichenbehafteten 32 Bit
Konstanten entspricht. Ohne L betrachtet der Compiler alles als INT, was
beim AVR GCC 16 Bit sind.
>viel und auch das Wort programmierung bringt mich nicht gerade zur>Erklärung.
Kauf dir ein C-Buch.
MfG
Falk
Tjoar wenn du meinst, dann bin ich wohl unfähig. Wenn unfähig die
Definition von: "Jemand der bei google nicht den perfekten Suchbegriff
eingibt" ist, dann hast du wohl Recht ...
Nen C Buch habe ich, aber ich bin ja sowieso schwer von Begriff, von
daher brauch ich mich da ja nich weiter rechtfertigen.
Trotzdem Danke für die Hilfe. Ich werds mal einfach ausprobieren mit der
Kommarei. VIelleicht frissta ja was ich von ihm will.
Oh da fällt mir gerade auf das ich deinen Link sogar gefunden hatte, nur
hab ich das patu nicht verstanden.
Hab das hier z.B. mal nachvollziehen wollen:
Anstatt eines ADC-Wertes werden oft auch Digitalwerte von
Temperatursensoren verarbeitet. Der Weg ist hier identisch. Allerdings
hat man keine Referenzspannung oder Referenztemperatur. Das ist aber
kein Beinbruch. Z.B. der LM74 hat eine Auflösung von 1/16°C = 0,0625°C.
Um das Messergebnis ohne Verlust von Auflösung auszugeben könnte man als
erstes den Digitalwert auf 1/100 °C umrechnen. Das geschieht mit der
Multiplikation mit 6,25. Doch Stop, das ist ja schon wieder ne
Gleitkommazahl. Doch kein Problem, wir wissen ja wie wir das Problem
lösen. Wir schieben das Komma um zwei Stellen nach rechts und
multiplizieren mit 625 und wissen, dass das Ergbniss nun in 1/10000°C
vorliegt. Über den physikalischen Sinn dieser Auflösung müssen wir nicht
nachdenken, wichtig ist für uns nur, dass jetzt die Zahl einfach per
itoa() umwandelbar ist. Allgemein kann man folgenden Ablauf zur
Berechnung des Korrekturfaktors angeben
Wie kommen die darauf das 0,0625 * 625 nen Ergebnis in 1/10000 bringt.
Also beim besten Willen, aber wenn diese Seite so einfach zu verstehen
ist, dann bin ich halt doch einfach geistig nicht auf nennenswerter
Leistung oder mir fehlen halt die drölf Jahre C-Erfahrung die einem zum
programmier Profi machen.
@ Icke_Wa (Gast)
>Wie kommen die darauf das 0,0625 * 625 nen Ergebnis in 1/10000 bringt.
Einfach mal den Artikel in RUHE lesen, nachdenken, verstehen.
Wenn man ihn beim ersten Lesen nicht vollständig versteht ist das
normal, muss man halt nochmal lesen und nachdenken. Es steht IMO alles
vollständig und mit vertretbarem Aufwand nachvollziehbar beschrieben im
Artikel.
MFG
Falk
Icke_Wa schrieb:> Oh da fällt mir gerade auf das ich deinen Link sogar gefunden hatte, nur> hab ich das patu nicht verstanden.
Ist doch ganz einfach.
Du nimmst einfach immer ein geeignetes Vielfaches. Was das ist hängt
davon ab, was du eigentlich rechnest und wieviele Kommastellen du haben
willst.
Beispiel.
Du willst Euros addieren
€ 3.85
+ € 8.72
---------
€ 12.57
Doch halt. Das ist Fliesskomma und genau das wolletn wir doch nicht.
Lösung: rechne alles in Cent, dann hast du
385 Cent
+ 872 Cent
---------
1257 Cent
Und da dir Umrechnung von Euro auf Cent eine Multiplikation mit 100 ist,
muss beim Ergebnis vor die 2. Nachkommastelle ein . bei der Ausgabe
eingeschmuggelt werden. Und schon steht am Display 12.57 Euros.
Das ist alles. Das ist Fixpunktarithmetik. Anstatt mit Kommazahlen
rechnest du einfach mit geeigneten Vielfachen. Ob das Cent oder
Zehntelcent, oder Grad oder Zehntelgrad oder Vierteläpfel oder
Tortenachtel oder ... sind, spielt keine Rolle. Du musst nur daran
denken, dass auch dein Ergebnis in entsprechenden Vielfachen
herauskommt. Und bei Multiplikationen musst du aufpassen.
Aber das kriegst du hin.
Hast du doch schon hunderte male gemacht. Zb wenn du mit Entfernungen
rechnen solltest und erst mal alle Kilometerangaben auf Meter gebracht
hast. Oder wenn du einen Mischmasch aus Meter, Zentimeter und Millimeter
erst mal konsequent in Millimeter ausgedrückt hast.
@Karl Heinz Buchegger (kbuchegg) (Moderator)
Dein Ethusiasmus ist sicher ehrenwert, aber Lernen heißt vor allem auch,
mal lesen und nachdenken. Und das kann KEIN ANDERER für den OP tun. Und
ich behaupte immer noch, dass so ziemlich ALLES was du geschrieben hast,
auch so und auch so gut erklärt im Artikel Festkommaarithmetik
steht. Gute Erklärungen sind wichtig, aber LERNEN ist KEIN Infotainment!
MfG
Falk
Das mit dem Kommaverschieben leuchtet ja erstmal ein. Nur will ich genau
deswegen ja auch eigentlich auf Festkommaarithmetik wechseln.
Ich habe hier Koeffizienten mit nem Wert von ca. 0.0000123. Um das jetzt
hochzupushen bräuche ich ja nen Faktor von 10.000.000. Ist erstmal auch
garkein Problem nur sind auch Werte drunter die z.B. 2.345 sind und wenn
ich zwei solche Werte dann multipliziere heißts Adios lieber 32Bit
Rahmen.
Ist Festkomma da jetzt die völlig falsche Idee?
Naja ich werd mir mal noch den Link nochmal in Ruhe durchlesen ... das
war auch sicherlich eines der Dinge die ich dabei nicht hatte. Mal
schaun obs was bringt.
Danke aufjedenfall für die Hilfe und wohl auch für die Geduld ;)
Icke_Wa schrieb:> Oh da fällt mir gerade auf das ich deinen Link sogar gefunden hatte, nur> hab ich das patu nicht verstanden.
Was ist ein "Patu"?
> Wie kommen die darauf das 0,0625 * 625 nen Ergebnis in 1/10000 bringt.
Preisfrage: Wieviel 10000stel Grad sind 1/16 Grad? Was mußt du also
machen, um den in 16tel-Grad-Schritten angegebenen Wert auf
10000stel-Schritte umzurechnen?
Icke_Wa schrieb:> Ich habe hier Koeffizienten mit nem Wert von ca. 0.0000123. Um das jetzt> hochzupushen bräuche ich ja nen Faktor von 10.000.000. Ist erstmal auch> garkein Problem nur sind auch Werte drunter die z.B. 2.345 sind und wenn> ich zwei solche Werte dann multipliziere heißts Adios lieber 32Bit> Rahmen.> Ist Festkomma da jetzt die völlig falsche Idee?
Kommt drauf an.
Kann ja auch sein, dass dein Koeffizient 0.0000123 sich im Endergebnis
so gut wie gar nicht mehr auswirkt und daher unter den Tisch fallen
kann. Oder dass man den Faktor, mit dem dieser Koeffizient multipliziert
werden muss, erst mal runterdividiert, damit dieser Koeffizient größer
werden kann um wieder ins Schema der anderen Koeffizienten zu passen.
Bei Fixkomma muss man eben ein wenig mitdenken und sich selbst was
überlegen.
PS: Wenn deine Koeffizienten wirklich um derartige Größenordnungen
auseinanderliegen, wärst du ohnehin mit float auch nicht glücklich
geworden.
Über float muss ich dank 8Bit Atmega auch garnicht nachdenken ^^
Die Frage obs ins Gewicht fällt ist ne gute. Soll nen Regelkreis werden.
GOtt meine Fragen überschlagen sich. Naja wer ne Frage nichtmal mehr
formulieren kann sollte wohl mal drüber nachdenken ...