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
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.
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
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)
64 bit kann der avr-gcc doch. Also einfach int64_t verwenden, das Programm wird es schon ausrechnen. Oliver
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.