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?
Immernoch ein Overflow. Vielleicht suchst du nach dem Wort underrun, das beschreibt aber etwas anderes.
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 | }
|
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.
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.
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
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
Das Gegenteil vom overflow ist der underflow. Wahlweise auch arithmetic overflow/underflow genannt: https://en.wikipedia.org/wiki/Arithmetic_underflow
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.
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
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
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. "
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.