Forum: Mikrocontroller und Digitale Elektronik 8-Bit Atmega256 - Festkommaarithmetik? und was bedeutet das L bei z.B. 5000L


von Icke_Wa (Gast)


Lesenswert?

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!

von Falk B. (falk)


Lesenswert?

@  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

von Icke_Wa (Gast)


Lesenswert?

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.

von Icke_Wa (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@  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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@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

von Icke_Wa (Gast)


Lesenswert?

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

von Rolf M. (rmagnus)


Lesenswert?

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?

von Icke_Wa (Gast)


Lesenswert?

Ein Patu ist ein Adjektiv ;)

Preisfragen mag ich ja so garnicht. Ist auch nicht mehr mein Problem. 
Mein Problem ist den Überlauf zu verhindern...

von Karl H. (kbuchegg)


Lesenswert?

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.

von Icke_Wa (Gast)


Lesenswert?

Ü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
Noch kein Account? Hier anmelden.