www.wikidata.de-de.nina.az
Der Arithmetische Uberlauf englisch arithmetic overflow oder Zahleruberlauf engl counter overflow tritt beim Rechnen in einem begrenzten Zahlenbereich immer dann auf wenn das Ergebnis den Zahlenbereich nach oben oder unten uberschreitet Begrenzte Zahlenbereiche kommen hauptsachlich in Computern vor aber auch in Taschenrechnern und Kilometerzahlern Die Auswirkungen eines Uberlaufs sind situationsabhangig Inhaltsverzeichnis 1 Ganze Zahlen ohne Vorzeichen 2 Ganze Zahlen mit Vorzeichen 3 Gleitkommazahlen 4 Auswirkungen 4 1 Modulo Rechnung 4 2 Sattigung 4 3 Fehlermarker 4 4 Ausnahmebehandlung 4 5 Undefiniertes Verhalten 4 6 Sicherheitslucken 5 Programmierschnittstelle 5 1 Verallgemeinerung 6 Siehe auch 7 Literatur 8 EinzelnachweiseGanze Zahlen ohne Vorzeichen BearbeitenDie einfachsten Datentypen in Computern sind Ganzzahlen ohne Vorzeichen Der Datentyp Byte kann 256 unterschiedliche Werte darstellen und diese Werte konnen als Zahlen im Bereich von 0 bis 255 interpretiert werden Wenn in diesem Zahlenbereich beispielsweise die Zahlen 200 und 100 addiert werden ist das Ergebnis 300 und damit grosser als der Maximalwert 255 Bei dieser Addition passiert ein arithmetischer Uberlauf das Ergebnis und das weitere Verhalten sind situationsabhangig Bereits vor einer Addition a b displaystyle a b nbsp lasst sich erkennen ob ein Uberlauf passieren wird Ein Uberlauf passiert dann wenn die Ungleichung a b gt max displaystyle a b gt textit max nbsp erfullt ist Formt man diese Ungleichung so um dass es in keinem der Rechenschritte zu einem Uberlauf kommen kann ergibt sich die Ungleichung a gt max b displaystyle a gt textit max b nbsp Beim Beispiel der Addition 200 100 displaystyle 200 100 nbsp im Zahlenbereich von 0 bis 255 ergibt sich die Ungleichung 200 gt 255 100 displaystyle 200 gt 255 100 nbsp umgeformt 200 gt 155 displaystyle 200 gt 155 nbsp die Gleichung ist erfullt daher passiert ein Uberlauf Fur die Rechenarten Subtraktion Multiplikation und Division ergeben sich die Prufbedingungen durch analoge Uberlegungen Uberlauf bei ganzen Zahlen ohne Vorzeichen Rechnung Bedingung fur Uberlaufa b displaystyle a b nbsp a gt max b displaystyle a gt textit max b nbsp a b displaystyle a b nbsp a lt b displaystyle a lt b nbsp a b displaystyle a cdot b nbsp a gt max b displaystyle a gt textit max b nbsp a b displaystyle a b nbsp b 0 displaystyle b 0 nbsp Bei der Addition und der Multiplikation muss nur die obere Grenze des Zahlenbereichs gepruft werden da die untere Grenze rein mathematisch schon nicht unterschritten werden kann Es ist zum Beispiel nicht moglich zwei positive Zahlen zu addieren und als Ergebnis eine negative Zahl zu erhalten Ganze Zahlen mit Vorzeichen BearbeitenBei ganzen Zahlen mit Vorzeichen gelten analoge Uberlegungen wie bei ganzen Zahlen ohne Vorzeichen In Computern werden ganze Zahlen mit Vorzeichen im Zweierkomplement dargestellt Dadurch liegt die Halfte der darstellbaren Zahlen im negativen Bereich und die 0 teilt sich mit den positiven Zahlen die andere Halfte Dadurch gibt es eine negative Zahl mehr als positive Zahlen Die Prufbedingungen fur den Uberlauf mussen so erganzt werden dass sie beide Bereichsgrenzen abdecken Dadurch dass bei den Prufbedingungen kein Uberlauf passieren darf benotigen die Ungleichungen Fallunterscheidungen und werden etwas aufwendiger als bei den Zahlen ohne Vorzeichen Uberlauf bei ganzen Zahlen mit Vorzeichen Rechnung Bedingungen fur Uberlaufa b displaystyle a b nbsp a gt 0 b gt 0 a gt max b displaystyle a gt 0 land b gt 0 land a gt textit max b nbsp a lt 0 b lt 0 a lt min b displaystyle a lt 0 land b lt 0 land a lt textit min b nbsp a b displaystyle a b nbsp a gt 0 b lt 0 a gt max b displaystyle a gt 0 land b lt 0 land a gt textit max b nbsp a lt 0 b gt 0 a lt min b displaystyle a lt 0 land b gt 0 land a lt textit min b nbsp a b displaystyle a cdot b nbsp a gt 0 b gt 0 a gt max b displaystyle a gt 0 land b gt 0 land a gt textit max b nbsp a gt 0 b lt 0 a gt min b displaystyle a gt 0 land b lt 0 land a gt textit min b nbsp a lt 0 b gt 0 a gt min b displaystyle a lt 0 land b gt 0 land a gt textit min b nbsp a lt 0 b lt 0 a gt max b displaystyle a lt 0 land b lt 0 land a gt textit max b nbsp a b displaystyle a b nbsp b 0 displaystyle b 0 nbsp a min b 1 displaystyle a textit min land b 1 nbsp Die Betragsfunktion die beim Prufen der Multiplikation verwendet wird muss einen Wertebereich haben der gross genug ist dass beim Berechnen von min displaystyle textit min nbsp kein Uberlauf auftritt Im Zweierkomplement erfullt der entsprechende vorzeichenlose Datentyp diese Bedingung Gleitkommazahlen BearbeitenDer Wertebereich von Gleitkommazahlen ist deutlich umfangreicher als der von Ganzzahlen auf Kosten der Genauigkeit Bei einem Uberlauf wird in IEEE 754 mit weitergerechnet Auswirkungen BearbeitenDie Auswirkungen eines Uberlaufs sind situationsabhangig und reichen von einem Weiterrechnen mit falschen Zahlen uber Programmabsturze bis zu Sicherheitslucken in Computern Modulo Rechnung Bearbeiten Die uberzahligen Stellen des Ergebnisses werden verworfen alle weiteren Berechnungen finden auf den verbleibenden Stellen statt Eine mogliche Folge ist dass zwei positive Zahlen addiert werden und das Ergebnis eine negative Zahl ist Beispiele Kilometerzahler im Auto Die Programmiersprache C bei vorzeichenlosen Datentypen Die Programmiersprache Java bei allen ganzzahligen DatentypenSattigung Bearbeiten Wenn das Ergebnis grosser als der maximal darstellbare Wert ist wird der maximal darstellbare Wert ubernommen Wenn das Ergebnis kleiner als der minimal darstellbare Wert ist wird der minimal darstellbare Wert ubernommen Beispiele Signalverarbeitung im Audio Bereich um Knackgerausche zu vermeiden Fehlermarker Bearbeiten Wenn das Ergebnis nicht im darstellbaren Bereich liegt wird es als fehlerhaft markiert Nachfolgende Rechenschritte leiten den Fehlermarker weiter so dass auch das Endergebnis ein Fehlermarker ist Ausnahmebehandlung Bearbeiten Der normale Programmablauf wird unterbrochen und stattdessen bei einer Routine zur Fehlerbehandlung fortgesetzt siehe Laufzeitfehler Ausnahmebehandlung Undefiniertes Verhalten Bearbeiten Die Programmiersprachen C und C definieren Uberlaufe bei vorzeichenbehafteten Zahlen als Undefiniertes Verhalten jede weitere Aussage uber einen moglichen Programmablauf ist damit hinfallig Sicherheitslucken Bearbeiten Ganzzahluberlaufe englisch integer overflow konnen ein sicherheitsrelevantes Problem darstellen wenn sie Teil eines Programmfehlers sind Insbesondere wenn die fehlerhafte Berechnung zur Bestimmung der Grosse eines Puffers genutzt wird oder die Adressierung eines Feldes betrifft Dann konnen daraus Pufferuberlaufe resultieren oder es einem Angreifer ermoglichen den Stack zu uberschreiben Einen Spezialfall stellt der sogenannte signedness bug dar Er tritt auf wenn eine vorzeichenbehaftete Ganzzahl signed als nichtnegative Zahl unsigned interpretiert wird Die Tragweite von Ganzzahluberlaufen liegt oft auch darin dass sie nicht erkannt werden konnen nachdem sie erfolgt sind Derart fehlerbehaftete Stellen sind im Programmcode deshalb nur schwer zu finden Programmierschnittstelle BearbeitenBeim Programmieren in Assemblersprachen hat der Programmierer direkten Zugriff auf den Prozessor insbesondere die Arithmetisch logische Einheit und deren Statusregister in dem festgehalten wird ob im letzten Rechenschritt ein Uberlauf auftrat In hoheren Programmiersprachen ist dieser direkte Zugriff nicht moglich dort muss eine Uberlauferkennung entweder von der Laufzeitumgebung bereits abgefangen werden oder selbst programmiert werden Addition zweier positiver Zahlen Addition negativer Zahlen mit Uberlauf Addition negativer Zahlen ohne Uberlauf0 1 0 1 5 10 0 1 1 0 1 1 5 10 0 1 0 1 0 6 10 displaystyle begin array cllllllr amp amp 0 amp 1 amp 0 amp 1 amp amp 5 10 amp amp 0 color Red 1 amp 1 amp 0 color Red 1 amp 1 amp amp 5 10 hline amp 0 amp 1 amp 0 amp 1 amp 0 amp amp 6 10 end array nbsp 1 0 1 1 5 10 1 1 0 1 1 1 1 5 10 1 0 1 1 0 6 10 displaystyle begin array crlllllr amp amp 1 amp 0 amp 1 amp 1 amp amp 5 10 amp color Red 1 amp 1 amp 0 color Red 1 amp 1 color Red 1 amp 1 amp amp 5 10 hline amp 1 amp 0 amp 1 amp 1 amp 0 amp amp 6 10 end array nbsp 1 1 1 1 1 10 1 1 1 1 1 0 1 1 3 10 1 1 1 0 0 4 10 displaystyle begin array crlllllr amp amp 1 amp 1 amp 1 amp 1 amp amp 1 10 amp color Red 1 amp 1 color Red 1 amp 1 color Red 1 amp 0 color Red 1 amp 1 amp amp 3 10 hline amp 1 amp 1 amp 1 amp 0 amp 0 amp amp 4 10 end array nbsp nbsp Alle in 4 Bit darstellbaren Zahlen als Kreis addiert man z B 5 und 5 sucht man sich die dargestellte 5 und geht im Uhrzeigersinn 5 Einheiten weiter es kommt zum Uberlaufen des Kreises und man landet bei 6 Verallgemeinerung Bearbeiten Operation richtiges Ergebnis UberlaufA B c n 0 c n 1 0 displaystyle c n 0 c n 1 0 nbsp c n 0 c n 1 1 displaystyle c n 0 c n 1 1 nbsp A B c n c n 1 displaystyle c n c n 1 nbsp nicht moglich A B c n 1 c n 1 1 displaystyle c n 1 c n 1 1 nbsp c n 1 c n 1 0 displaystyle c n 1 c n 1 0 nbsp Man muss sich stets die letzten beiden Ubertrage anschauen hier c n displaystyle c n nbsp und c n 1 displaystyle c n 1 nbsp genannt Sind diese ungleich dann ist das Ergebnis falsch als Resultat eines Uberlaufes Bei der Addition einer positiven und einer negativen Zahl kann dies nie der Fall sein 1 Siehe auch BearbeitenUberlaufbit Der Ubertrag engl carry entsteht beim Rechnen mit einzelnen Ziffern er zeigt keinen Fehlerzustand an Der Unterlauf tritt auf wenn das Ergebnis eines Rechenschritts zwar innerhalb des Gultigkeitsbereichs liegt aber betragsmassig so klein nah bei 0 ist dass er aufgrund zu geringer Genauigkeit des verwendeten Datentyps falschlicherweise zu 0 wird Langzahlarithmetik um die Begrenzung auf eine feste Anzahl von Ziffern zu umgehen Bei Computern die vom Jahr 2038 Problem betroffen sind springen Datum und Uhrzeit auf 1901 zuruck Arithmetischer Unterlauf PufferuberlaufLiteratur BearbeitenBlexim Basic Integer Overflows In Phrack Magazin 11 Nr 60 Februar 2002Einzelnachweise Bearbeiten Fricke Klaus Digitaltechnik Lehr und Ubungsbuch fur Elektrotechniker und Informatiker 5 Aufl Vieweg Teubner 2007 Print Seite 9 Abgerufen von https de wikipedia org w index php title Arithmetischer Uberlauf amp oldid 238681951