File : a-nllefu-cert.ads
1 ------------------------------------------------------------------------------
2 -- --
3 -- GNAT RUNTIME COMPONENTS --
4 -- --
5 -- ADA.NUMERICS.LONG_LONG_ELEMENTARY_FUNCTIONS --
6 -- --
7 -- S p e c --
8 -- --
9 -- Copyright (C) 1992-2013, 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-nllefu.ads (rts-cert,
33 -- rts-ravenscar-cert, rts-ravenscar-cert-rtp)
34
35 -- The separate version is necessary, because this system does not provide an
36 -- implementation of tanh, among other hyperbolic functions.
37
38 -- The run time currently has no code to implement these functions, so the
39 -- only short term option was to remove the hyperbolic functions.
40
41 with System.Generic_C_Math_Interface;
42
43 package Ada.Numerics.Long_Long_Elementary_Functions is
44 pragma Pure (Long_Long_Elementary_Functions);
45
46 function Sqrt (X : Long_Long_Float) return Long_Long_Float;
47 function Log (X : Long_Long_Float) return Long_Long_Float;
48 function Log (X, Base : Long_Long_Float) return Long_Long_Float;
49 function Exp (X : Long_Long_Float) return Long_Long_Float;
50 function "**" (Left, Right : Long_Long_Float) return Long_Long_Float;
51
52 function Sin (X : Long_Long_Float) return Long_Long_Float;
53 function Sin (X, Cycle : Long_Long_Float) return Long_Long_Float;
54 function Cos (X : Long_Long_Float) return Long_Long_Float;
55 function Cos (X, Cycle : Long_Long_Float) return Long_Long_Float;
56 function Tan (X : Long_Long_Float) return Long_Long_Float;
57 function Tan (X, Cycle : Long_Long_Float) return Long_Long_Float;
58 function Cot (X : Long_Long_Float) return Long_Long_Float;
59 function Cot (X, Cycle : Long_Long_Float) return Long_Long_Float;
60
61 function Arcsin (X : Long_Long_Float) return Long_Long_Float;
62 function Arcsin (X, Cycle : Long_Long_Float) return Long_Long_Float;
63 function Arccos (X : Long_Long_Float) return Long_Long_Float;
64 function Arccos (X, Cycle : Long_Long_Float) return Long_Long_Float;
65
66 function Arctan
67 (Y : Long_Long_Float;
68 X : Long_Long_Float := 1.0) return Long_Long_Float;
69
70 function Arctan
71 (Y : Long_Long_Float;
72 X : Long_Long_Float := 1.0;
73 Cycle : Long_Long_Float) return Long_Long_Float;
74
75 function Arccot
76 (X : Long_Long_Float;
77 Y : Long_Long_Float := 1.0) return Long_Long_Float;
78
79 function Arccot
80 (X : Long_Long_Float;
81 Y : Long_Long_Float := 1.0;
82 Cycle : Long_Long_Float) return Long_Long_Float;
83
84 private
85 function C_Sqrt (X : Long_Long_Float) return Long_Long_Float;
86 function C_Log (X : Long_Long_Float) return Long_Long_Float;
87 function C_Exp (X : Long_Long_Float) return Long_Long_Float;
88 function C_Pow (X, Y : Long_Long_Float) return Long_Long_Float;
89 function C_Sin (X : Long_Long_Float) return Long_Long_Float;
90 function C_Cos (X : Long_Long_Float) return Long_Long_Float;
91 function C_Tan (X : Long_Long_Float) return Long_Long_Float;
92 function C_Asin (X : Long_Long_Float) return Long_Long_Float;
93 function C_Acos (X : Long_Long_Float) return Long_Long_Float;
94 function C_Atan2 (Y, X : Long_Long_Float) return Long_Long_Float;
95
96 pragma Import (C, C_Sqrt, "sqrt");
97 pragma Import (C, C_Log, "log");
98 pragma Import (C, C_Exp, "exp");
99 pragma Import (C, C_Pow, "pow");
100 pragma Import (C, C_Sin, "sin");
101 pragma Import (C, C_Cos, "cos");
102 pragma Import (C, C_Tan, "tan");
103 pragma Import (C, C_Asin, "asin");
104 pragma Import (C, C_Acos, "acos");
105 pragma Import (C, C_Atan2, "atan2");
106
107 package CMI is new System.Generic_C_Math_Interface (Long_Long_Float);
108
109 function Sqrt (X : Long_Long_Float) return Long_Long_Float
110 renames CMI.Sqrt;
111
112 function Log (X : Long_Long_Float) return Long_Long_Float
113 renames CMI.Log;
114
115 function Log (X, Base : Long_Long_Float) return Long_Long_Float
116 renames CMI.Log;
117
118 function Exp (X : Long_Long_Float) return Long_Long_Float
119 renames CMI.Exp;
120
121 function "**" (Left, Right : Long_Long_Float) return Long_Long_Float
122 renames CMI."**";
123
124 function Sin (X : Long_Long_Float) return Long_Long_Float
125 renames CMI.Sin;
126
127 function Sin (X, Cycle : Long_Long_Float) return Long_Long_Float
128 renames CMI.Sin;
129
130 function Cos (X : Long_Long_Float) return Long_Long_Float
131 renames CMI.Cos;
132
133 function Cos (X, Cycle : Long_Long_Float) return Long_Long_Float
134 renames CMI.Cos;
135
136 function Tan (X : Long_Long_Float) return Long_Long_Float
137 renames CMI.Tan;
138
139 function Tan (X, Cycle : Long_Long_Float) return Long_Long_Float
140 renames CMI.Tan;
141
142 function Cot (X : Long_Long_Float) return Long_Long_Float
143 renames CMI.Cot;
144
145 function Cot (X, Cycle : Long_Long_Float) return Long_Long_Float
146 renames CMI.Cot;
147
148 function Arcsin (X : Long_Long_Float) return Long_Long_Float
149 renames CMI.Arcsin;
150
151 function Arcsin (X, Cycle : Long_Long_Float) return Long_Long_Float
152 renames CMI.Arcsin;
153
154 function Arccos (X : Long_Long_Float) return Long_Long_Float
155 renames CMI.Arccos;
156
157 function Arccos (X, Cycle : Long_Long_Float) return Long_Long_Float
158 renames CMI.Arccos;
159
160 function Arctan
161 (Y : Long_Long_Float;
162 X : Long_Long_Float := 1.0) return Long_Long_Float
163 renames CMI.Arctan;
164
165 function Arctan
166 (Y : Long_Long_Float;
167 X : Long_Long_Float := 1.0;
168 Cycle : Long_Long_Float) return Long_Long_Float
169 renames CMI.Arctan;
170
171 function Arccot
172 (X : Long_Long_Float;
173 Y : Long_Long_Float := 1.0) return Long_Long_Float
174 renames CMI.Arccot;
175
176 function Arccot
177 (X : Long_Long_Float;
178 Y : Long_Long_Float := 1.0;
179 Cycle : Long_Long_Float) return Long_Long_Float
180 renames CMI.Arccot;
181
182 end Ada.Numerics.Long_Long_Elementary_Functions;