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
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
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?
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
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
> Ich nicht sagen, ob Exponentialdarstellungen unterstützt > werden... noch nicht. 10E2 (als Beispiel) geht jedenfalls nicht :-(
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 ...
Vielleicht 2 x word zu verwenden ... damit kann man bis 4 GB darstellen rene
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
>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.
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
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 ;)
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
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.
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.