with Ada.Numerics.Elementary_Functions ; use Ada.Numerics.Elementary_Functions ; package body fns is function Value( arg : double ; params : System.Address ) return double is begin return arg ; end Value; function Ex1( arg : double ; params : System.Address ) return double is use gsl.double_elementary_functions ; begin return arg ** 1.5 ; end Ex1 ; function Tangent( arg : double ; params : System.Address ) return double is use gsl.double_elementary_functions ; begin return Tan(arg, 2.0 * Ada.Numerics.Pi) ; end Tangent; function LogSqrt( arg : double ; params : System.Address ) return double is use gsl.double_elementary_functions ; alpha : double ; for alpha'Address use params ; begin return Log(alpha * arg , base => Ada.Numerics.e ) / sqrt( arg ); end LogSqrt; function Power( arg : double ; params : System.Address ) return double is pow : int ; for pow'Address use params ; begin return arg ** Integer(pow) + 1.0 ; end Power ; function Sin( arg : double ; params : System.Address ) return double is begin return gsl.double_elementary_functions.Sin(arg); end Sin ; end fns ;