Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mit Über- und Unterläufen rechnen (https://www.delphipraxis.net/116796-mit-ueber-und-unterlaeufen-rechnen.html)

Matze 6. Jul 2008 20:40


Mit Über- und Unterläufen rechnen
 
Hallo zusammen,

ich habe folgende simple Aufgabe vor mir liegen und komme einfach nicht aufs richtige Ergebnis:

Code:
unsigned int a, b;
unsigned long result;

b = 20000;
a = 50000;

result = 65536 + (b - a);
"unsigned int" ist 16 Bit groß, hat also einen Wertebereich von 0 - 65535. In der Klammer kommt es zum Unterlauf, da 20000 - 50000 negativ ist. Aber ich weiß nicht, wie man damit genau rechnet.

Wie groß hier ein long-Datentyp ist, weiß ich nicht, aber da sollte es nicht zu einem Überlauf kommen.

Könnt ihr mir sagen, wie man mit Unterläufen bzw. wenn es geht auch mit Überläufen rechnen kann?

Einfache Dinge wie 65535 + 1 = 0 bekomme ich hin, aber sobald das so große Zahlen sind, ist mir das zu komplex. *g*

Grüße

Der.Kaktus 6. Jul 2008 21:01

Re: Mit Über- und Unterläufen rechnen
 
Zitat:

Zitat von Matze
Hallo zusammen,

ich habe folgende simple Aufgabe vor mir liegen und komme einfach nicht aufs richtige Ergebnis:

Code:
unsigned int a, b;
unsigned long result;

b = 20000;
a = 50000;

result = 65536 + (b - a);
"unsigned int" ist 16 Bit groß, hat also einen Wertebereich von 0 - 65535. In der Klammer kommt es zum Unterlauf, da 20000 - 50000 negativ ist. Aber ich weiß nicht, wie man damit genau rechnet.

Wie groß hier ein long-Datentyp ist, weiß ich nicht, aber da sollte es nicht zu einem Überlauf kommen.

Könnt ihr mir sagen, wie man mit Unterläufen bzw. wenn es geht auch mit Überläufen rechnen kann?

Einfache Dinge wie 65535 + 1 = 0 bekomme ich hin, aber sobald das so große Zahlen sind, ist mir das zu komplex. *g*

Grüße

Hallo Matze,

unsigned int ist ein Datentyp in C++. niedrigster Wert: 0, höchster Wert: 4.294.967.295. Länge: 32 Bit. hilft Dir das?

Matze 6. Jul 2008 21:04

Re: Mit Über- und Unterläufen rechnen
 
Hallo Kaki,

nö. *g*

In meinem Fall ist ein "unsigned int" wie gesagt 16 Bit groß (Vorgabe, denn es geht um C und Mikrocontroller, doch das tut nichts zur Sache)

Laut deiner Theorie würde dann 20000 - 50000 = 0 ergeben, wenn ich's richtig verstanden habe. Somit sollte "result" den Wert 65536 haben.
Die Lösung ist jedoch 101072

Grüße

Edit: Es wäre übrigens sinnvoll, nicht den ganzen Beitrag zu zitieren, sondern nur relevantes. Sonst muss man so viel scrollen. ;)

Angel4585 6. Jul 2008 21:08

Re: Mit Über- und Unterläufen rechnen
 
ich würde ne if-Abfrage einbauen, und dann das kleiner von dem größeren abziehen

Apollonius 6. Jul 2008 21:10

Re: Mit Über- und Unterläufen rechnen
 
Du musst modulo 65536 rechnen: 20000 - 50000 = -30000 ist kongruent zu 35536. Danach geht es normal weiter.

Angel4585 6. Jul 2008 21:11

Re: Mit Über- und Unterläufen rechnen
 
[OT]
Zitat:

Zitat von Apollonius
Du musst modulo 65536 rechnen: 20000 - 50000 = -30000 ist kongruent zu 35536. Danach geht es normal weiter.

unge du bist erst 15 solche Wörter solltest du garnicht kennen :shock:
[/OT]

Der.Kaktus 6. Jul 2008 21:12

Re: Mit Über- und Unterläufen rechnen
 
Zitat:

Zitat von Matze
Hallo Kaki,
..
Edit: Es wäre übrigens sinnvoll, nicht den ganzen Beitrag zu zitieren, sondern nur relevantes. Sonst muss man so viel scrollen. ;)

werde mich dran halten..Danke ;-)..Sorry..war bei C++

Matze 6. Jul 2008 21:16

Re: Mit Über- und Unterläufen rechnen
 
Zitat:

Zitat von Angel4585
ich würde ne if-Abfrage einbauen, und dann das kleiner von dem größeren abziehen

Dazu sag ich jetzt lieber mal nichts. Es geht auf jedenfall ums schriftliche Rechnen. Und was hast du gegen Philips Antwort?
Ich finde die wirklich gut und weiß nun, dass ich zum negativen Wert den Maximalwert des Integers drauf addieren muss. Dankesehr. :thumb:

Grüße

Edit: ich hatte die falsche Person zitiert.

Der.Kaktus 6. Jul 2008 21:22

Re: Mit Über- und Unterläufen rechnen
 
Zitat:

Zitat von Angel4585
[OT]
Zitat:

Zitat von Apollonius
Du musst modulo 65536 rechnen: 20000 - 50000 = -30000 ist kongruent zu 35536. Danach geht es normal weiter.

unge du bist erst 15 solche Wörter solltest du garnicht kennen :shock:
[/OT]

Solche Kommentare
Zitat:

unge du bist erst 15 solche Wörter solltest du garnicht kennen :shock:
solltest Du unterlassen..es soll auch "Jugend" geben..die Ahnung hat *fg*

Apollonius 6. Jul 2008 21:25

Re: Mit Über- und Unterläufen rechnen
 
Zitat:

Zitat von Matze
...weiß nun, dass ich zum negativen Wert den Maximalwert des Integers drauf addieren muss.

Damit kommst du aber auch nur bei Subtraktion klar, bei Addition oder Multiplikation sieht es anders aus. Letztlich läuft es auf den mod-Operator hinaus: So lange 65538 addieren oder subtrahieren, bis die Zahl im geforderten Bereich ist.
Wenn du es mathematisch magst: Dein unsigned int ist ein Restklassenring.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz