Programovací jazyk Ada má modulární typy, které realizují modulární aritmetiku. Tam přetečení nehrozí, protože jakákoliv operace vždycky skončí v povoleném rozsahu.
U standardních typů není přetečení povoleno a je signalizováno výjimkou.
Mějme ukázkový program:
with Ada.Text_IO; use Ada.Text_IO; procedure Overflow_Example is subtype Small_Int is Integer range 1 .. 10; X : Small_Int := 10; begin Put_Line("Initial value of X: " & Integer'Image(X)); X := X + 1; Put_Line("New value of X: " & Integer'Image(X)); exception when Constraint_Error => Put_Line("Constraint_Error: Integer range overflow detected."); end Overflow_Example;
Tento program při svém spuštění vypíše následující:
Initial value of X: 10 Constraint_Error: Integer range overflow detected.
Oproti tomu mírně upravený program s využitím modulárního typu:
with Ada.Text_IO; use Ada.Text_IO; procedure Modular_Example is type Modular_Int is mod 10; X : Modular_Int := 9; begin Put_Line("Initial value of X: " & Modular_Int'Image(X)); X := X + 1; Put_Line("New value of X: " & Modular_Int'Image(X)); exception when Constraint_Error => Put_Line("Constraint_Error: Integer range overflow detected."); end Modular_Example;
vypíše toto:
Initial value of X: 9 New value of X: 0