AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Mit Über- und Unterläufen rechnen
Thema durchsuchen
Ansicht
Themen-Optionen

Mit Über- und Unterläufen rechnen

Ein Thema von Matze · begonnen am 6. Jul 2008 · letzter Beitrag vom 6. Jul 2008
Antwort Antwort
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Mit Über- und Unterläufen rechnen

  Alt 6. Jul 2008, 21:40
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
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Mit Über- und Unterläufen rechnen

  Alt 6. Jul 2008, 22:01
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?
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Mit Über- und Unterläufen rechnen

  Alt 6. Jul 2008, 22:04
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.
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Mit Über- und Unterläufen rechnen

  Alt 6. Jul 2008, 22:08
ich würde ne if-Abfrage einbauen, und dann das kleiner von dem größeren abziehen
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Mit Über- und Unterläufen rechnen

  Alt 6. Jul 2008, 22:10
Du musst modulo 65536 rechnen: 20000 - 50000 = -30000 ist kongruent zu 35536. Danach geht es normal weiter.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Mit Über- und Unterläufen rechnen

  Alt 6. Jul 2008, 22:11
[OT]
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
[/OT]
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Mit Über- und Unterläufen rechnen

  Alt 6. Jul 2008, 22:12
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++
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Mit Über- und Unterläufen rechnen

  Alt 6. Jul 2008, 22:16
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.

Grüße

Edit: ich hatte die falsche Person zitiert.
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Mit Über- und Unterläufen rechnen

  Alt 6. Jul 2008, 22:22
Zitat von Angel4585:
[OT]
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
[/OT]
Solche Kommentare
Zitat:
unge du bist erst 15 solche Wörter solltest du garnicht kennen
solltest Du unterlassen..es soll auch "Jugend" geben..die Ahnung hat *fg*
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Mit Über- und Unterläufen rechnen

  Alt 6. Jul 2008, 22:25
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 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