Forum: PC-Programmierung Gegenteil von Overflow


von TR.0LL (Gast)


Lesenswert?

Hallo,

wie heißt das gegenteil von Overflow?

z.B.: Man nimmt eine 8-bit große Variable (z.B.: uint8_t,char) setzt 
diese auf Null und subrahiert eins. Als Ergebnis kommt dann ja 255 raus 
oder?

von Marek N. (Gast)


Lesenswert?

Borrow

von was (Gast)


Lesenswert?

Immernoch ein Overflow.


Vielleicht suchst du nach dem Wort underrun, das beschreibt aber etwas 
anderes.

von TR.0LL (Gast)


Lesenswert?

was schrieb:
> Immernoch ein Overflow.
>
>
> Vielleicht suchst du nach dem Wort underrun, das beschreibt aber etwas
> anderes.

Danke für die Antworten!!!

Dann bennene ich die Funktion jetzt substractOneOverflow.
1
uint8_t substractOneOverflow(uint8_t _number, uint8_t _overflow)
2
{
3
  if (_number > _overflow)
4
  {
5
    return _number -1;
6
  }
7
  else
8
  {
9
    return _overflow;
10
  }
11
}

von AVerr (Gast)


Lesenswert?

Ein paar Kleinigkeiten: erstmal heißt es subtract und nicht substract.

Zweitens, das was du hier machst ist doch gar kein overflow, sondern ein 
lower bound.

von Numeriker (Gast)


Lesenswert?

Vllt. passt Dir underflow besser?  ;-)

Ansonsten wird das Verhalten, wo Zahlenwerte an der oberen oder unteren 
vorgegeben Limite "kleben" bleiben, Saturierung genannt.

In FPUs, DSPs usw. gibt es durchaus extra Instruktionen (oder Mode bits) 
mit saturierendem Verhalten.

von georg (Gast)


Lesenswert?

Numeriker schrieb:
> Vllt. passt Dir underflow besser?  ;-)

In manchen Manuals wird das auch so benannt, aber wenn es passiert, wird 
in der CPU das OVERFlow-Bit gesetzt. Um das auszuwerten verwendet man 
einen Befehl wie "Subtract with Borrow" oder "Jump if not Borrow", die 
beachten das Overflow-Bit - alle Klarheiten beseitigt?

Georg

von Rolf M. (rmagnus)


Lesenswert?

georg schrieb:
> Numeriker schrieb:
>> Vllt. passt Dir underflow besser?  ;-)
>
> In manchen Manuals wird das auch so benannt, aber wenn es passiert, wird
> in der CPU das OVERFlow-Bit gesetzt. Um das auszuwerten verwendet man
> einen Befehl wie "Subtract with Borrow" oder "Jump if not Borrow", die
> beachten das Overflow-Bit - alle Klarheiten beseitigt?

Das Overflow-Bit kann man für Addition und Subtraktion einfach als 
zusätzliches Bit betrachten. Das benötigt man, weil bei Addition oder 
Subtraktion zweier Werte mit einer Breite von jeweils n Bit für die 
Darstellung aller möglichen gültigen Ergebnisse n+1 Bit benötigt werden.
Aber hier soll ja gerade kein Overflow passieren. Wie "Numeriker" schon 
schreibt, handelt es sich um saturierende Arithmetik, also könnte man 
die Funktion z.B. subtractSaturated nennen.

: Bearbeitet durch User
von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Das Gegenteil vom overflow ist der underflow. Wahlweise auch arithmetic 
overflow/underflow genannt: 
https://en.wikipedia.org/wiki/Arithmetic_underflow

von Overunderflow (Gast)


Lesenswert?

Tim T. schrieb:
> Das Gegenteil vom overflow ist der underflow.

Witzig dass du gerade den Wiki Artikel verlinkst in dem steht dass es in 
diesem (integer) Fall eben nicht underflow heißt:
> Storing values that are too low in an integer variable (e.g., attempting to 
store −1 in an unsigned integer) is properly referred to as integer overflow, or 
more broadly, integer wraparound. The term underflow normally refers to floating 
point numbers only, which is a separate issue.

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Overunderflow schrieb:
> Tim T. schrieb:
>> Das Gegenteil vom overflow ist der underflow.
>
> Witzig dass du gerade den Wiki Artikel verlinkst in dem steht dass es in
> diesem (integer) Fall eben nicht underflow heißt:
>> Storing values that are too low in an integer variable (e.g., attempting to
> store −1 in an unsigned integer) is properly referred to as integer overflow, or
> more broadly, integer wraparound. The term underflow normally refers to floating
> point numbers only, which is a separate issue.

In dem Artikel bezog ich mich dabei auf das Beispiel mit dem Exponenten 
im Absatz davor:
"Underflow can in part be regarded as negative overflow of the exponent 
of the floating point value. For example, if the exponent part can 
represent values from −128 to 127, then a result with a value less than 
−128 may cause underflow."

Wobei natürlich auch der Begriff des integer underflow regulär verwendet 
wird, nicht nur im Zusammenhang mit floatingpoints.
Nur dadurch das der underflow bei Gleitkommazahlen explizit in der 
IEEE754 erwähnt und behandelt wird, hat sich der Begriff hauptsächlich 
bei diesen eingebürgert.

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

Tim T. schrieb:
> "Underflow can in part be regarded as negative overflow of the exponent
> of the floating point value.

Ja, aber das ist dennoch:

Overunderflow schrieb:
> a separate issue

Denn hier geht es ja nicht wie beim normalen Überlauf um einen 
Wraparound, der ein Overflow-Bit setzt, sondern darum, dass die 
Floating-Point-Zahl dann denormalisiert.
https://en.wikipedia.org/wiki/Denormal_number

von rbx (Gast)


Lesenswert?

TR.0LL schrieb:
> Als Ergebnis kommt dann ja 255 raus
> oder?

naja, schon eine Woche alt..

Der Wikiartikel zum 
https://de.wikipedia.org/wiki/Arithmetischer_%C3%9Cberlauf hat noch:

" Einen Spezialfall stellt der sogenannte signedness bug dar. Er tritt 
auf, wenn eine vorzeichenbehaftete Ganzzahl (signed) als nichtnegative 
Zahl (unsigned) interpretiert wird.  "

(weiter unten)

Bei FF (Hex) wären dann alle Zahlen ab 80 die von der "negativen" Seite 
im Zweierkomplement. Das kann man so erkennen, muss man aber nicht.

Bzw.: das muss man erstmal wissen.
In Assembler kann man z.B. die Arithmetik-Shift-Befehle ausprobieren.
Also vor allem nach rechts schieben.

https://en.wikipedia.org/wiki/Arithmetic_shift
(weiter unten):
" Non-equivalence of arithmetic right shift and division
However, arithmetic right shifts are major traps for the unwary, 
specifically in treating rounding of negative integers. For example, in 
the usual two's complement representation of negative integers, −1 is 
represented as all 1's. For an 8-bit signed integer this is 1111 1111. 
An arithmetic right-shift by 1 (or 2, 3, …, 7) yields 1111 1111 again, 
which is still −1. This corresponds to rounding down (towards negative 
infinity), but is not the usual convention for division. "

von Gerald K. (geku)


Lesenswert?


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
Noch kein Account? Hier anmelden.