19 lines
684 B
Ada
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 "+";
|