Overflow (informatica)

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken

In de informatica is er sprake van overflow als het resultaat van een berekening te groot is om opgeslagen te worden in het betrokken register of geheugenadres. Er wordt onderscheid gemaakt tussen beheerste overflow, waarbij er een carry optreedt als het resultaat van een optelling of een aftrekking van getallen van een unsigned type niet gerepresenteerd kan worden. Door de carryvlag af te vragen kan nagegaan worden of er overflow geweest is. Echte overflow treedt op als het resultaat van een berekening een teken heeft dat niet overeenkomt met het verwachte teken, zoals wanneer het optellen van twee positieve getallen een negatief resultaat blijkt te geven. Het is daarom nuttig de overflowvlag te controleren na het optellen of aftrekken van getallen in two's complement representatie.

Er zijn verscheidene methoden om met overflow om te gaan:

  1. Ontwerp: door de correcte datatypen te gebruiken en rekening te houden met de optredende tekens en grootte van de getallen.
  2. Vermijden: door zorgvuldig tevoren de bewerkingen na te gaan en met de volgorde rekening te houden kan vermeden worden dat overflow optreedt.
  3. Afhandelen: als verwacht wordt dat overflow zal optreden, kan het geconstateerd worden en op de juiste wijze afgehandeld worden.
  4. Voortplanting: als een resultaat te groot is om opgeslagen te worden, kan er een speciale waarde aan toegekend worden om aan te geven dat overflow is opgetreden, waarna bij alle volgende bewerkingen deze waarde behouden blijft. Zodoende kan aan het einde van een lange berekening geconstateerd worden dat ergens overflow geweest is en hoeft niet bij elke stap afzonderlijk te worden gecontroleerd. Dit wordt vaak door Floating Point Hardware (FPU) ondersteund.
  5. Negeren: Vaak ook wordt er geen rekening met overflow gehouden en het optreden ervan eenvoudig genegeerd. Dit kan natuurlijk onjuiste resultaten opleveren en tot een crash van het programma leiden.

Zie ook[bewerken]