File : a-nlelfu-cert.ads
1 ------------------------------------------------------------------------------
2 -- --
3 -- GNAT RUNTIME COMPONENTS --
4 -- --
5 -- ADA.NUMERICS.LONG_ELEMENTARY_FUNCTIONS --
6 -- --
7 -- S p e c --
8 -- --
9 -- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
10 -- --
11 -- GNAT is free software; you can redistribute it and/or modify it under --
12 -- terms of the GNU General Public License as published by the Free Soft- --
13 -- ware Foundation; either version 3, or (at your option) any later ver- --
14 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
15 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
16 -- or FITNESS FOR A PARTICULAR PURPOSE. --
17 -- --
18 -- --
19 -- --
20 -- --
21 -- --
22 -- You should have received a copy of the GNU General Public License and --
23 -- a copy of the GCC Runtime Library Exception along with this program; --
24 -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
25 -- <http://www.gnu.org/licenses/>. --
26 -- --
27 -- GNAT was originally developed by the GNAT team at New York University. --
28 -- Extensive contributions were provided by Ada Core Technologies Inc. --
29 -- --
30 ------------------------------------------------------------------------------
31
32 -- This is the Cert specific version of a-nlelfu.ads.
33 -- The separate version is necessary, because this system does not
34 -- provide an implementation of tanh, among other hyperbolic functions.
35 -- The run time currently has no code to implement this function,
36 -- so the only short term option was to remove the hyperbolic functions.
37
38 with System.Generic_C_Math_Interface;
39
40 package Ada.Numerics.Long_Elementary_Functions is
41 pragma Pure (Long_Elementary_Functions);
42
43 function Sqrt (X : Long_Float) return Long_Float;
44 function Log (X : Long_Float) return Long_Float;
45 function Log (X, Base : Long_Float) return Long_Float;
46 function Exp (X : Long_Float) return Long_Float;
47 function "**" (Left, Right : Long_Float) return Long_Float;
48
49 function Sin (X : Long_Float) return Long_Float;
50 function Sin (X, Cycle : Long_Float) return Long_Float;
51 function Cos (X : Long_Float) return Long_Float;
52 function Cos (X, Cycle : Long_Float) return Long_Float;
53 function Tan (X : Long_Float) return Long_Float;
54 function Tan (X, Cycle : Long_Float) return Long_Float;
55 function Cot (X : Long_Float) return Long_Float;
56 function Cot (X, Cycle : Long_Float) return Long_Float;
57
58 function Arcsin (X : Long_Float) return Long_Float;
59 function Arcsin (X, Cycle : Long_Float) return Long_Float;
60 function Arccos (X : Long_Float) return Long_Float;
61 function Arccos (X, Cycle : Long_Float) return Long_Float;
62
63 function Arctan
64 (Y : Long_Float;
65 X : Long_Float := 1.0)
66 return Long_Float;
67
68 function Arctan
69 (Y : Long_Float;
70 X : Long_Float := 1.0;
71 Cycle : Long_Float)
72 return Long_Float;
73
74 function Arccot
75 (X : Long_Float;
76 Y : Long_Float := 1.0)
77 return Long_Float;
78
79 function Arccot
80 (X : Long_Float;
81 Y : Long_Float := 1.0;
82 Cycle : Long_Float)
83 return Long_Float;
84
85 private
86 pragma Assert (Long_Float'Machine_Radix = 2,
87 "only binary Long_Floating-point types supported");
88
89 function C_Sqrt (X : Long_Float) return Long_Float;
90 function C_Log (X : Long_Float) return Long_Float;
91 function C_Exp (X : Long_Float) return Long_Float;
92 function C_Pow (X, Y : Long_Float) return Long_Float;
93
94 function C_Sin (X : Long_Float) return Long_Float;
95 function C_Cos (X : Long_Float) return Long_Float;
96 function C_Tan (X : Long_Float) return Long_Float;
97
98 function C_Asin (X : Long_Float) return Long_Float;
99 function C_Acos (X : Long_Float) return Long_Float;
100 function C_Atan2 (Y, X : Long_Float) return Long_Float;
101
102 pragma Import (C, C_Sqrt, "sqrt");
103 pragma Import (C, C_Log, "log");
104 pragma Import (C, C_Exp, "exp");
105 pragma Import (C, C_Pow, "pow");
106
107 pragma Import (C, C_Sin, "sin");
108 pragma Import (C, C_Cos, "cos");
109 pragma Import (C, C_Tan, "tan");
110
111 pragma Import (C, C_Asin, "asin");
112 pragma Import (C, C_Acos, "acos");
113 pragma Import (C, C_Atan2, "atan2");
114
115 package CMI is new System.Generic_C_Math_Interface (Long_Float);
116
117 function Sqrt (X : Long_Float) return Long_Float renames CMI.Sqrt;
118 function Log (X : Long_Float) return Long_Float renames CMI.Log;
119 function Log (X, Base : Long_Float) return Long_Float renames CMI.Log;
120 function Exp (X : Long_Float) return Long_Float renames CMI.Exp;
121 function "**" (Left, Right : Long_Float) return Long_Float renames CMI."**";
122
123 function Sin (X : Long_Float) return Long_Float renames CMI.Sin;
124 function Sin (X, Cycle : Long_Float) return Long_Float renames CMI.Sin;
125 function Cos (X : Long_Float) return Long_Float renames CMI.Cos;
126 function Cos (X, Cycle : Long_Float) return Long_Float renames CMI.Cos;
127 function Tan (X : Long_Float) return Long_Float renames CMI.Tan;
128 function Tan (X, Cycle : Long_Float) return Long_Float renames CMI.Tan;
129 function Cot (X : Long_Float) return Long_Float renames CMI.Cot;
130 function Cot (X, Cycle : Long_Float) return Long_Float renames CMI.Cot;
131
132 function Arcsin (X : Long_Float) return Long_Float renames CMI.Arcsin;
133
134 function Arcsin
135 (X, Cycle : Long_Float)
136 return Long_Float renames CMI.Arcsin;
137
138 function Arccos (X : Long_Float) return Long_Float renames CMI.Arccos;
139
140 function Arccos
141 (X, Cycle : Long_Float)
142 return Long_Float renames CMI.Arccos;
143
144 function Arctan
145 (Y : Long_Float;
146 X : Long_Float := 1.0)
147 return Long_Float renames CMI.Arctan;
148
149 function Arctan
150 (Y : Long_Float;
151 X : Long_Float := 1.0;
152 Cycle : Long_Float)
153 return Long_Float renames CMI.Arctan;
154
155 function Arccot
156 (X : Long_Float;
157 Y : Long_Float := 1.0)
158 return Long_Float renames CMI.Arccot;
159
160 function Arccot
161 (X : Long_Float;
162 Y : Long_Float := 1.0;
163 Cycle : Long_Float)
164 return Long_Float renames CMI.Arccot;
165
166 end Ada.Numerics.Long_Elementary_Functions;