Desbordament aritmètic
En programació, es produïx un desbordament de sancers quan una operació aritmètica intenta crear un valor numèric que està fòra del ranc que pot representar-se en un número donat de dígits, ya siga major que el màxim o menor que el mínim valor representable.
El resultat més comú d'un desbordament és que s'almagasenen els dígits representables menys significatius del resultat; es diu que el resultat es envol al voltant del màxim (és dir, el resultat obtingut es correspon a aplicar el mòdul del màxim admissible, una potència sancera de la base interna de càlcul, generalment dos en les computadores modernes, pero a voltes dèu o un atre número).
Una condició de desbordament pot donar resultats que conduïxen a un comportament no desijat. En particular, si no s'ha anticipat esta possibilitat, el desbordament pot comprometre la fiabilitat d'un programa i el seu seguritat.
Per a algunes aplicacions, com els temporisadors i els rellonges, pot ser convenient ajustar el desbordament. L'estàndart C11 indica que per a sancers sense signe, l'ajust de mòdul és el comportament definit i el terme desbordament mai s'aplica: "un càlcul que involucre operants sense signe mai pot desbordar-se".[1]
En alguns processadors com les targetes gràfiques (GPUs) i processadors digitals de senyals (DSPs) que soporten aritmètica de saturació, els resultats desbordats es "fixen", és dir, s'establixen en el valor mínim o màxim del ranc representable, en lloc de modular-se sobre el màxim.
Orige
[editar | editar còdic]l'arquitectura interna d'un processador determina el ranc de valors que es poden representar en els seus registres. Encara que la gran majoria de les computadores poden realisar aritmètica de precisió múltiple en els operants de la memòria, lo que permet que els números siguen arbitrariamente llarcs i s'eviten els desbordament, l'ample del registre llimita el tamany dels números individuals que poden operar-se (per eixemple, sumar o restar) usant una instrucció única per operació. Els amples de registre binarios típics per a sancers sense signe inclouen:
- 8 bits: valor màxim representable 28 - 1 = 255
- 16 bits: valor màxim representable 216 - 1 = 65,535
- 32 bits: valor màxim representable 232 - 1 = 4,294,967,295 (l'ample més comú per a computadores personals al començament dels anys 2000)
- 64 bits: valor màxim representable 264 - 1 = 18,446,744,073,709,551,615 (l'ample més comú per als processadors de les computadores personals cap a 2020),
- 128 bits: valor màxim representable 2128 - 1 = 340,282,366,920,938,463,374,607,431,768,211,455
Quan una operació aritmètica produïx un resultat major que el màxim anterior per a un sancer de N bits, un desbordament reduïx el resultat al mòdul de la N-ésima potència de 2, retenint solament els bits menys significatius del resultat i provocant un regrés total.
En particular, multiplicar o sumar dos sancers pot resultar en un valor que és inesperadament menut, i restar d'un sancer chicotet pot causar un ajust a un valor positiu gran (per eixemple, la suma de sancers de 8 bits 255 + 2 dona com a resultat 1, que és 257 mod 28 i, de manera similar, la resta 0 - 1 dona com a resultat 255, una representació complement a dos de −1).
Dita envolvente pot causar problemes de seguritat: si s'utilisa un valor desbordat com el número de bytes per a assignar a un búfer, el búfer s'assignarà de forma inesperadament menuda, lo que podria provocar un desbordament del búfer que, depenent del seu us, podria a la seua volta causa l'eixecució de còdic arbitrari.
Si la variable és del tipo sancer en signe, un programa pot supondre que una variable sempre conté un valor positiu. Un desbordament de sancers pot fer que el valor s'ajuste i es torne negatiu, lo que viola la suposició del programa i pot conduir a un comportament inesperat (per eixemple, l'adició de sancers de 8 bits de 127 + 1 dona com a resultat −128, un complement de dos de 128). Una solució per a este problema en particular és usar tipos de sancers sense signe per als valors que un programa espera i assumix que mai seran negatius.
Banderes
[editar | editar còdic]La majoria de les computadores tenen dos indicadors del processador dedicats per a verificar les condicions de desbordament.
La bandera de carrege s'activa quan el resultat d'una suma o resta, considerant els operants i el resultat com a números sense signe, no cap en el número donat de bits. Açò indica un desbordament en un carrege del bit més significatiu. Una operació immediatament posterior a "agregar en carrege" o "restar en préstam" usaria el contingut d'este indicador per a modificar un registre o una ubicació de memòria que continga la part superior d'un valor de vàries paraules.
La bandera de desbordament també s'activa quan el resultat d'una operació en números en signe no té el signe que es podria predir a partir dels signes dels operants, per eixemple, un resultat negatiu en sumar dos números positius. Açò indica que s'ha produït un desbordament i que el resultat presentat (el complement a dos), no coincidix en el resultat verdader, que no cabria en el número donat de bits.
Vore també
[editar | editar còdic]- Desbordament de búfer
- Desbordament de montícul
- Mesclat de busques
- Proves de software
- Desbordament de pila
- Anàlisis estàtic de software
- Senyal (informàtica)
Referències
[editar | editar còdic]
Referències
[editar | editar còdic]
- Este artícul conté una traducció derivada de «Desbordamiento aritmético» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.