Forum: PC-Programmierung Gegenteil von Overflow


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von TR.0LL (Gast)


Bewertung
0 lesenswert
nicht 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. (bruderm)


Bewertung
0 lesenswert
nicht lesenswert
Borrow

von was (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Immernoch ein Overflow.


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

von TR.0LL (Gast)


Bewertung
0 lesenswert
nicht 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.
uint8_t substractOneOverflow(uint8_t _number, uint8_t _overflow)
{
  if (_number > _overflow)
  {
    return _number -1;
  }
  else
  {
    return _overflow;
  }
}

von AVerr (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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


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

von Overunderflow (Gast)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.