RosettaCodeData/Task/Safe-addition/Ada/safe-addition-2.ada
Ingy döt Net b83f433714 tasks a-s
2013-04-10 23:57:08 -07:00

19 lines
684 B
Ada

function "+" (A, B : Float) return Interval is
Result : constant Float := A + B;
begin
if Result < 0.0 then
if Float'Machine_Rounds then
return (Float'Adjacent (Result, Float'First), Float'Adjacent (Result, 0.0));
else
return (Float'Adjacent (Result, Float'First), Result);
end if;
elsif Result > 0.0 then
if Float'Machine_Rounds then
return (Float'Adjacent (Result, 0.0), Float'Adjacent (Result, Float'Last));
else
return (Result, Float'Adjacent (Result, Float'Last));
end if;
else -- Underflow
return (Float'Adjacent (0.0, Float'First), Float'Adjacent (0.0, Float'Last));
end if;
end "+";