-- Copyright (C) 1986  by Xerox Corporation. All rights reserved. 
-- Libm.mesa
-- NFS    11-Feb-86  9:31:43

-- C library math functions

DIRECTORY
  DoubleReal USING [Double];
Libm: DEFINITIONS = {

  Double: TYPE = DoubleReal.Double;
  Complex: TYPE = MACHINE DEPENDENT RECORD [x, y: Double];

  sin: PROCEDURE [x: Double] RETURNS [Double];
  cos: PROCEDURE [x: Double] RETURNS [Double];
  tan: PROCEDURE [x: Double] RETURNS [Double];
  log: PROCEDURE [x: Double] RETURNS [Double];
  log1p: PROCEDURE [x: Double] RETURNS [Double];  -- log(x+1)
  log10: PROCEDURE [x: Double] RETURNS [Double];  -- base 10 log
  lgamma: PROCEDURE [arg: Double] RETURNS [Double];
  exp: PROCEDURE [x: Double] RETURNS [Double];
  frexp: PROCEDURE [x: Double, i: LONG POINTER TO INTEGER] RETURNS [Double];
  ldexp: PROCEDURE [x: Double, exp: INTEGER] RETURNS [Double];
  asin: PROCEDURE [x: Double] RETURNS [Double];
  acos: PROCEDURE [x: Double] RETURNS [Double];
  atan: PROCEDURE [x: Double] RETURNS [Double];
  atan2: PROCEDURE [y, x: Double] RETURNS [Double];
  sinh: PROCEDURE [x: Double] RETURNS [Double];
  cosh: PROCEDURE [x: Double] RETURNS [Double];
  tanh: PROCEDURE [x: Double] RETURNS [Double];
  asinh: PROCEDURE [x: Double] RETURNS [Double];
  acosh: PROCEDURE [x: Double] RETURNS [Double];
  atanh: PROCEDURE [x: Double] RETURNS [Double];
  cabs: PROCEDURE [z: Complex] RETURNS [Double];
  hypot: PROCEDURE [x, y: Double] RETURNS [Double];
  sqrt: PROCEDURE [x: Double] RETURNS [Double];
  cbrt: PROCEDURE [x: Double] RETURNS [Double];  -- cube root
  expm1: PROCEDURE [x: Double] RETURNS [Double];
  pow: PROCEDURE [x, y: Double] RETURNS [Double];
  fmod: PROCEDURE [x, y: Double] RETURNS [Double];

  abs: PROCEDURE [i: INTEGER] RETURNS [INTEGER];
  fabs: PROCEDURE [d: Double] RETURNS [Double];
  modf: PROCEDURE [d: Double, iptr: LONG POINTER TO Double] RETURNS [Double];

  floor: PROCEDURE [d: Double] RETURNS [Double];
  ceil: PROCEDURE [d: Double] RETURNS [Double];
  rint: PROCEDURE [x: Double] RETURNS [Double];

  -- Bessel's function of the 1st and 2nd kinds.
  j0: PROCEDURE [arg: Double] RETURNS [Double];  -- order 0
  j1: PROCEDURE [arg: Double] RETURNS [Double];  -- order 1
  jn: PROCEDURE [n: INTEGER, x: Double] RETURNS [Double];  -- integer order


  y0: PROCEDURE [arg: Double] RETURNS [Double];
  y1: PROCEDURE [arg: Double] RETURNS [Double];
  yn: PROCEDURE [n: INTEGER, x: Double] RETURNS [Double];

  }.