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 <[email protected]>
* 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)));