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;