Überlauf mit Integer

Gast #440258
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


Gast
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
Gast
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
Gast
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
Gast
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 ...
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


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

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.