Forum: Mikrocontroller und Digitale Elektronik long int Konstante möglich?


von Mädchen für alles (Gast)


Lesenswert?

Hallo,

ich habe einen Atmega16 zur Verfügung und habe noch nicht allzu große 
Erfahrungen mit µC Programmierung. Ist es möglich mit diesem 8-bit 
Controller Rechenoperationen der folgenden Art durchzuführen:

#define PI = 3.14....


....

long int const = 10000000000;
y(i) = cos(2*PI*x(i)*(x(i)/const));

....


Oder sprengt die Konstante 10000000000 den Rahmen des 8 Bit Controllers? 
Ich meine das long int Format sollte doch mit der Zahl umgehen können, 
oder?

Danke für Eure Hilfe.

mfg


Chris

von Klaus W. (mfgkw)


Lesenswert?

Mädchen für alles schrieb:
> Hallo,
>
> ich habe einen Atmega16 zur Verfügung und habe noch nicht allzu große
> Erfahrungen mit µC Programmierung. Ist es möglich mit diesem 8-bit
> Controller Rechenoperationen der folgenden Art durchzuführen:
>
> #define PI = 3.14....
>
>
> ....
>
> long int const = 10000000000;
> y(i) = cos(2*PI*x(i)*(x(i)/const));
>
> ....
>
>
> Oder sprengt die Konstante 10000000000 den Rahmen des 8 Bit Controllers?
> Ich meine das long int Format sollte doch mit der Zahl umgehen können,

Nein, das ist 0x2540be400 und damit gerade mehr als 4 Byte lang.

Und const ist ein reserviertes Schlüsselwort.


> oder?

Oder so:
1
  uint64_t c1 = 10000000000ull;
2
  int64_t  c2 = 10000000000ll;

> ...

Ob es nötig und sinnvoll ist, auf einem AVR mit solchen Zahlen zu
hantieren, sei mal dahingestellt.
Danach hattest du ja nicht gefragt.

von Oliver (Gast)


Lesenswert?

Die AVR's rechnen intern mit 8-Bit. Das macht aber erst einmal nichts, 
die zum avr-gcc-gehörige mathe-lib bringt die Grundrechenarten bis 32 
Bit mit.

Ein long beim avr-gcc hat dabei 32 bit, ein int 16 bit.

Da aber 10000000000 nicht in einen 32-bit-int passt, wird es 
schwieriger. Es gibt im Netz Code für mathelibs mit 64-Bit-Arithmetik, 
damit wird es dann gehen, nur halt nicht sonderlich schnell.

Oliver

von Mädchen für alles (Gast)


Lesenswert?

Alles klar! Vielen Dank für den Hinweis.

von Klaus W. (mfgkw)


Lesenswert?

Angenommen, ich bin zu faul, es auf einem Atmel auszuprobieren.
Mein avr-gcc übersetzt ohne Meckern meinen Vorschlag mit int64_t.
Geht das dann wirklich gut, oder wird tatsaächlich nur bis 32 Bit
gerechnet?
-> gcc version 4.3.2 (GCC)

von Oliver (Gast)


Lesenswert?

64 bit kann der avr-gcc doch. Also einfach int64_t verwenden, das 
Programm wird es schon ausrechnen.

Oliver

von Klaus W. (mfgkw)


Lesenswert?

Danke, dann brauche ich mich nicht aufraffen!

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.