www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Überlauf mit Integer


Autor: MAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe ein Problem - hervorgerufen
durch folgende Rechenoperation:

a = 10 * 10.000

a soll den Wert zwischenspeichern.
Da es sich bei a aber um eine Integer handelt
(es sind keine anderen Datentypen vorhanden)
kommt es zu einem Überlauf.

Wie geht man am besten vor,
wenn ich Zahlen > 2^15
in Integer-Variablen speichern soll?

Sprache: NQC

Schöne Grüße
MAB



Autor: antworter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die Größe des Datentyps "int" hängt von der Architektur ab (16 Bit / 32 
Bit).

Mein Tip: da Du wohl in C programmierst, solltest Du mal ein Blick in 
die relevanten ".h" Dateien werfen.

10 * 10.000 = 100.000 > 2^16

probier mal "long" / "uint32_t" als Datentyp

Autor: MAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ne leider eben nicht C
sondern NQC - Not Quite C
Hier gibt es keinen Datentyp
außer Integer.
16 bit Architektur.

Kann mir jemand helfen?

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
NQC ist die Sprache fuer die Lego Mindstorms Serie, aha!
http://en.wikipedia.org/wiki/NQC

Also wenn's da wirklich keine anderen Datentypen gibt, hilft es nur, 
nach einer der Addition das Carry flag zu untersuchen (ja, nach der 
Addition, Du mussst also selbst ne Multiplikationsroutine bauen ...)
Aber ich hab in dem Tutorial mal nach Carry gesucht und nix gefunden ... 
:-O

Sonst wuerde ich evtl. Exponentialdarstellung vorschlagen: ein int fuer 
die Mantisse und einen fuer den Exponenten. Natuerlich braucht das auch 
eine eigene Multiplikationsroutine ...

Hoert sich nicht prikelnd an, scheint aber so zu sein.

Just my to pence ...

Viel Erfolg!

Thorsten

Autor: MAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke! Sorry ich dachte NQC ist eine gängige Sprache.
Ich nicht sagen, ob Exponentialdarstellungen unterstützt
werden... noch nicht. Den anderen Vorschlag werde ich mir
auch noch genauer ansehen.

Gruß
MAB

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich nicht sagen, ob Exponentialdarstellungen unterstützt
> werden... noch nicht.

10E2 (als Beispiel) geht jedenfalls nicht :-(

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Exponentialdarstellung musste ja selber machen (wenn die Sprache nix 
anderes kann als int, dann kann die auch keine 
exponentialdarstellung)...
exponenten addieren, mantissen muliplizieren und dann mantisse wieder 
normieren (auf eine sinnvolle zahl, evtl ist das sqrt(2^16-1) ) und 
exponent anpassen ...

Autor: rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht 2 x word zu verwenden ... damit kann man bis 4 GB darstellen

rene

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MAB wrote:
> Danke! Sorry ich dachte NQC ist eine gängige Sprache.


Ich höre davon auch zum erstan mal.

Im Profibereich wird wohl eher selten Lego gespielt.

Wenn etwas nicht unterstützt wird, mußt Du es wie unter Assembler 
machen: selber bauen.


Peter



Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Im Profibereich wird wohl eher selten Lego gespielt.

Sowas macht man noch an FH und Unis...

Was spricht denn dagegen, den Zahlenbereich manuell zu erweitern, so wie 
rene es vorgeschlagen hat.

Autor: MAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter wrote:
> Wenn etwas nicht unterstützt wird, mußt Du es wie unter Assembler
machen: selber bauen.

Ja das wird wahrscheinlich
die einzige Möglichkeit sein
wie es aussieht.

>Im Profibereich wird wohl eher selten Lego gespielt.

Aber wie "unsichtbarer WM-Rahul" schon sagte an FH oder
Unis.

Gruß MAB

Autor: marvin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
NQC ist ziemlich beschränkt, was die Möglichkeiten betrifft. Das 
aktuelle "Robo-Interface" von fischertechnik ist da wesentlich 
interessanter - es hat einen M16C30245-µC und es gibt einen kostenlosen 
C-Compiler von Renesas, der neben allen gängigen Integer-Formaten auch 
float und double unterstützt. Vielleicht mal mit dem Prof sprechen, ob 
nicht langsam mal etwas aktuelles angeschafft werden sollte ;)

Autor: Martin Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mindstrom-Kits sind nicht unüblich als Übungsplattform bei der "Embedded 
Systems"-Ausbildung. NQC ist ganz o.k., wenn man mit dem 
vorinstallierten Betriebssystem "spielen" will, aber wie bereits 
festgestellt etwas eingeschränkt. Deutlich mehr Möglichkeiten bietet ein 
gcc-Cross-Compiler für H8 und BrickOS als System. Damit dann auch keine 
Probleme mit uint32_t. Intro: 
http://brickos.sourceforge.net/documents.htm

Autor: marvin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Lego-Interface ist auch in anderer Hinsicht ziemlich beschränkt, 
denn es hat weniger Ausgänge. Das fischertechnik-Interface hat von Haus 
aus 8 Ausgänge (4 Motoren) und kann auf 32 Ausgänge (16 Motoren) 
erweitert werden.
Für kleinere Spielereien ist Lego einfacher und auch schneller 
zusammengebaut.

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.