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?
Ein Patu ist ein Adjektiv ;) Preisfragen mag ich ja so garnicht. Ist auch nicht mehr mein Problem. Mein Problem ist den Überlauf zu verhindern...
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 ...
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.