The check that raises Constraint_Error for arguments that equal the machine number nearest Pi / 2.0 must be removed, as the tangent of this machine number is well-defined and does not overflow.
-- Test case, should compile and execute quietly with Ada.Numerics.Long_Long_Elementary_Functions; use Ada.Numerics.Long_Long_Elementary_Functions; procedure Testtan is subtype Double is Long_Long_Float; X : Double := Ada.Numerics.Pi / 2.0; Y : Double; begin Y := Tan (X); if not Y'Valid then raise Program_Error; end if; end Testtan; Tested on x86_64-pc-linux-gnu, committed on trunk 2011-08-29 Geert Bosch <bo...@adacore.com> * a-ngelfu.adb (Tan): Do not raise Constraint_Error if the argument is the closest machine number to Pi / 2.0.
Index: a-ngelfu.adb =================================================================== --- a-ngelfu.adb (revision 178155) +++ a-ngelfu.adb (working copy) @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2009, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -914,9 +914,6 @@ begin if abs X < Sqrt_Epsilon then return X; - - elsif abs X = Pi / 2.0 then - raise Constraint_Error; end if; return Float_Type'Base (Aux.Tan (Double (X)));