mikrocontroller.net

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


Autor: Mädchen für alles (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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:
  uint64_t c1 = 10000000000ull;
  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.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mädchen für alles (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar! Vielen Dank für den Hinweis.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Oliver (Gast)
Datum:

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

Oliver

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, dann brauche ich mich nicht aufraffen!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.