-Fred Fish
=============== Cut here and feed to the shell ========================
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 2 (of 6)."
# Contents: funcs/environ/testfrexp.c funcs/environ/testldexp.c
# funcs/environ/testmodf.c funcs/src/acos.c funcs/src/acosh.c
# funcs/src/asin.c funcs/src/asinh.c funcs/src/atan2.c
# funcs/src/atanh.c funcs/src/cacos.c funcs/src/cdiv.c
# funcs/src/cmult.c funcs/src/cosh.c funcs/src/csqrt.c
# funcs/src/csubt.c funcs/src/poly.c funcs/src/sinh.c
# funcs/src/tan.c funcs/src/tanh.c funcs/unused/dint.c
# Wrapped by fnf@mcdsun on Fri Apr 10 16:21:41 1987
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f funcs/environ/testfrexp.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/environ/testfrexp.c\"
else
echo shar: Extracting \"funcs/environ/testfrexp.c\" \(2017 characters\)
sed "s/^X//" >funcs/environ/testfrexp.c <<'END_OF_funcs/environ/testfrexp.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FILE
X *
X * testfrexp.c test the runtime environment function frexp
X *
X * DESCRIPTION
X *
X * This simple minded program is provided to aid in testing
X * the "frexp" function assumed to be provided in the runtime
X * environment. If not provided, a suitable substitute can
X * be coded in C, however the necessary code is very machine
X * dependent and is generally almost trivial to code in assembly
X * language for the specific host machine.
X *
X * The frexp() function takes two arguments, the first is a double
X * and the second is a pointer to an int. Frexp() returns the
X * mantissa of the first arg, and stores the exponent indirectly
X * in the location pointed to by the second arg.
X *
X * See "frexp(3C)" in the Unix System V User's Manual for more
X * information.
X *
X * This program is typically used as:
X *
X * testfrexp <testfrexp.in >junkfile
X * diff testfrexp.out junkfile
X *
X */
X
X#include <stdio.h>
X
Xextern double frexp ();
X
Xmain ()
X{
X double input; /* Input value */
X double dmant; /* Mantissa, 0.5 LE |dmant| LT 1.0 */
X int intexp; /* Exponent as power of 2 */
X
X while (scanf ("%le", &input) == 1) {
X dmant = frexp (input, &intexp);
X printf ("%le %d\n", dmant, intexp);
X }
X}
END_OF_funcs/environ/testfrexp.c
if test 2017 -ne `wc -c <funcs/environ/testfrexp.c`; then
echo shar: \"funcs/environ/testfrexp.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/environ/testldexp.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/environ/testldexp.c\"
else
echo shar: Extracting \"funcs/environ/testldexp.c\" \(2027 characters\)
sed "s/^X//" >funcs/environ/testldexp.c <<'END_OF_funcs/environ/testldexp.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FILE
X *
X * testldexp.c test the runtime environment function ldexp
X *
X * DESCRIPTION
X *
X * This simple minded program is provided to aid in testing
X * the "ldexp" function assumed to be provided in the runtime
X * environment. If not provided, a suitable substitute can
X * be coded in C, however the necessary code is very machine
X * dependent and is generally almost trivial to code in assembly
X * language for the specific host machine.
X *
X * The ldexp() function takes two arguments, the first is a double
X * which is the mantissa of the returned double value. The second
X * is an int which is the exponent of the returned double. The
X * result is (mantissa * (2 ** exp)).
X *
X * See "frexp(3C)" in the Unix System V User's Manual for more
X * information.
X *
X * This program is typically used as:
X *
X * testldexp <testldexp.in >junkfile
X * diff testldexp.out junkfile
X *
X */
X
X#include <stdio.h>
X
Xextern double ldexp ();
X
Xmain ()
X{
X double dmant; /* Mantissa, 0.5 LE |dmant| LT 1.0 */
X int intexp; /* Exponent as power of 2 */
X double result; /* dmant times 2 to the intexp */
X
X while (scanf ("%le %d", &dmant, &intexp) == 2) {
X result = ldexp (dmant, intexp);
X printf ("%le\n", result);
X }
X}
END_OF_funcs/environ/testldexp.c
if test 2027 -ne `wc -c <funcs/environ/testldexp.c`; then
echo shar: \"funcs/environ/testldexp.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/environ/testmodf.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/environ/testmodf.c\"
else
echo shar: Extracting \"funcs/environ/testmodf.c\" \(1977 characters\)
sed "s/^X//" >funcs/environ/testmodf.c <<'END_OF_funcs/environ/testmodf.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FILE
X *
X * testmodf.c test the runtime environment function modf
X *
X * This simple minded program is provided to aid in testing
X * the "modf" function assumed to be provided in the runtime
X * environment. If not provided, a suitable substitute can
X * be coded in C, however the necessary code is very machine
X * dependent and is generally almost trivial to code in assembly
X * language for the specific host machine.
X *
X * The modf() function takes two arguments. The first is a double value
X * and the second is a pointer to a double. Modf() returns the
X * signed fraction part of the first argument, and stores the integral
X * part (as a double) indirectly in the location pointed to by the
X * second argument. Note that both the direct and indirect result will
X * have the same sign, and:
X *
X * <integral part> + <fractional part> = <original value>
X *
X * See "frexp(3C)" in the Unix System V User's Manual for more
X * information.
X *
X */
X
Xextern double modf ();
X
Xmain ()
X{
X double input; /* Input value */
X double frac;
X double ipart;
X
X while (scanf ("%le", &input) == 1) {
X frac = modf (input, &ipart);
X printf ("%le %le\n", frac, ipart);
X }
X}
END_OF_funcs/environ/testmodf.c
if test 1977 -ne `wc -c <funcs/environ/testmodf.c`; then
echo shar: \"funcs/environ/testmodf.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/acos.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/acos.c\"
else
echo shar: Extracting \"funcs/src/acos.c\" \(2942 characters\)
sed "s/^X//" >funcs/src/acos.c <<'END_OF_funcs/src/acos.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * acos double precision arc cosine
X *
X * KEY WORDS
X *
X * acos
X * machine independent routines
X * trigonometric functions
X * math libraries
X *
X * DESCRIPTION
X *
X * Returns double precision arc cosine of double precision
X * floating point argument.
X *
X * USAGE
X *
X * double acos (x)
X * double x;
X *
X * REFERENCES
X *
X * Fortran IV-plus user's guide, Digital Equipment Corp. pp B-1.
X *
X * RESTRICTIONS
X *
X * The maximum relative error for the approximating polynomial
X * in atan is 10**(-16.82). However, this assumes exact arithmetic
X * in the polynomial evaluation. Additional rounding and
X * truncation errors may occur as the argument is reduced
X * to the range over which the polynomial approximation
X * is valid, and as the polynomial is evaluated using
X * finite-precision arithmetic.
X *
X * PROGRAMMER
X *
X * Fred Fish
X *
X * INTERNALS
X *
X * Computes arccosine(x) from:
X *
X * (1) If x < -1.0 or x > +1.0 then call
X * matherr and return 0.0 by default.
X *
X * (2) If x = 0.0 then acos(x) = PI/2.
X *
X * (3) If x = 1.0 then acos(x) = 0.0
X *
X * (4) If x = -1.0 then acos(x) = PI.
X *
X * (5) If 0.0 < x < 1.0 then
X * acos(x) = atan(Y)
X * Y = sqrt[1-(x**2)] / x
X *
X * (4) If -1.0 < x < 0.0 then
X * acos(x) = atan(Y) + PI
X * Y = sqrt[1-(x**2)] / x
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
Xstatic char funcname[] = "acos";
X
X
Xdouble acos (x)
Xdouble x;
X{
X double y;
X extern double atan();
X extern double sqrt();
X auto struct exception xcpt;
X
X DBUG_ENTER (funcname);
X DBUG_3 ("acosin", "arg %le", x);
X if ( x > 1.0 || x < -1.0) {
X xcpt.type = DOMAIN;
X xcpt.name = funcname;
X xcpt.arg1 = x;
X if (!matherr (&xcpt)) {
X fprintf (stderr, "%s: DOMAIN error\n", funcname);
X errno = EDOM;
X xcpt.retval = 0.0;
X }
X } else if (x == 0.0) {
X xcpt.retval = HALFPI;
X } else if (x == 1.0) {
X xcpt.retval = 0.0;
X } else if (x == -1.0) {
X xcpt.retval = PI;
X } else {
X y = atan ( sqrt (1.0 - (x * x)) / x );
X if (x > 0.0) {
X xcpt.retval = y;
X } else {
X xcpt.retval = y + PI;
X }
X }
X DBUG_3 ("acosout", "result %le", x);
X DBUG_RETURN (x);
X}
END_OF_funcs/src/acos.c
if test 2942 -ne `wc -c <funcs/src/acos.c`; then
echo shar: \"funcs/src/acos.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/acosh.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/acosh.c\"
else
echo shar: Extracting \"funcs/src/acosh.c\" \(2642 characters\)
sed "s/^X//" >funcs/src/acosh.c <<'END_OF_funcs/src/acosh.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * acosh double precision hyperbolic arc cosine
X *
X * KEY WORDS
X *
X * acosh
X * machine independent routines
X * math libraries
X *
X * DESCRIPTION
X *
X * Returns double precision hyperbolic arc cosine of double precision
X * floating point number.
X *
X * USAGE
X *
X * double acosh (x)
X * double x;
X *
X * RESTRICTIONS
X *
X * The range of the ACOSH function is all real numbers greater
X * than or equal to 1.0 however large arguments may cause
X * overflow in the x squared portion of the function evaluation.
X *
X * For precision information refer to documentation of the
X * floating point library primatives called.
X *
X * PROGRAMMER
X *
X * Fred Fish
X *
X * INTERNALS
X *
X * Computes acosh(x) from:
X *
X * 1. If x < 1.0 then report illegal
X * argument and return zero.
X *
X * 2. If x > sqrt(MAXDOUBLE) then
X * set x = sqrt(MAXDOUBLE and
X * continue after reporting overflow.
X *
X * 3. acosh(x) = log [x+sqrt(x**2 - 1)]
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
Xstatic char funcname[] = "acosh";
X
X
Xdouble acosh (x)
Xdouble x;
X{
X auto struct exception xcpt;
X extern double log ();
X extern double sqrt ();
X
X DBUG_ENTER (funcname);
X DBUG_3 ("acoshin", "arg %le", x);
X if (x < 1.0) {
X xcpt.type = DOMAIN;
X xcpt.name = funcname;
X xcpt.arg1 = x;
X if (!matherr (&xcpt)) {
X fprintf (stderr, "%s: DOMAIN error\n", funcname);
X errno = ERANGE;
X xcpt.retval = 0.0;
X }
X } else if (x > SQRT_MAXDOUBLE) {
X xcpt.type = OVERFLOW;
X xcpt.name = funcname;
X xcpt.arg1 = x;
X if (!matherr (&xcpt)) {
X fprintf (stderr, "%s: OVERFLOW error\n", funcname);
X errno = ERANGE;
X x = SQRT_MAXDOUBLE;
X xcpt.retval = log (2* SQRT_MAXDOUBLE);
X }
X } else {
X xcpt.retval = log (x + sqrt (x*x - 1.0));
X }
X DBUG_3 ("acoshout", "result %le", xcpt.retval);
X DBUG_RETURN (xcpt.retval);
X}
X
END_OF_funcs/src/acosh.c
if test 2642 -ne `wc -c <funcs/src/acosh.c`; then
echo shar: \"funcs/src/acosh.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/asin.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/asin.c\"
else
echo shar: Extracting \"funcs/src/asin.c\" \(2675 characters\)
sed "s/^X//" >funcs/src/asin.c <<'END_OF_funcs/src/asin.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * asin double precision arc sine
X *
X * KEY WORDS
X *
X * asin
X * machine independent routines
X * trigonometric functions
X * math libraries
X *
X * DESCRIPTION
X *
X * Returns double precision arc sine of double precision
X * floating point argument.
X *
X * If argument is less than -1.0 or greater than +1.0, calls
X * matherr with a DOMAIN error. If matherr does not handle
X * the error then prints error message and returns 0.
X *
X * USAGE
X *
X * double asin (x)
X * double x;
X *
X * REFERENCES
X *
X * Fortran IV-plus user's guide, Digital Equipment Corp. pp B-2.
X *
X * RESTRICTIONS
X *
X * For precision information refer to documentation of the floating
X * point library primatives called.
X *
X * PROGRAMMER
X *
X * Fred Fish
X *
X * INTERNALS
X *
X * Computes arcsine(x) from:
X *
X * (1) If x < -1.0 or x > +1.0 then
X * call matherr and return 0.0 by default.
X *
X * (2) If x = 0.0 then asin(x) = 0.0
X *
X * (3) If x = 1.0 then asin(x) = PI/2.
X *
X * (4) If x = -1.0 then asin(x) = -PI/2
X *
X * (5) If -1.0 < x < 1.0 then
X * asin(x) = atan(y)
X * y = x / sqrt[1-(x**2)]
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
Xstatic char funcname[] = "asin";
X
X
Xdouble asin (x)
Xdouble x;
X{
X extern double atan ();
X extern double sqrt ();
X struct exception xcpt;
X
X DBUG_ENTER (funcname);
X DBUG_3 ("asinin", "arg %le", x);
X if ( x > 1.0 || x < -1.0) {
X xcpt.type = DOMAIN;
X xcpt.name = funcname;
X xcpt.arg1 = x;
X if (!matherr (&xcpt)) {
X fprintf (stderr, "%s: DOMAIN error\n", funcname);
X errno = EDOM;
X xcpt.retval = 0.0;
X }
X } else if (x == 0.0) {
X xcpt.retval = 0.0;
X } else if (x == 1.0) {
X xcpt.retval = HALFPI;
X } else if (x == -1.0) {
X xcpt.retval = -HALFPI;
X } else {
X xcpt.retval = atan ( x / sqrt (1.0 - (x * x)) );
X }
X DBUG_3 ("asinout", "result %le", xcpt.retval);
X DBUG_RETURN (xcpt.retval);
X}
END_OF_funcs/src/asin.c
if test 2675 -ne `wc -c <funcs/src/asin.c`; then
echo shar: \"funcs/src/asin.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/asinh.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/asinh.c\"
else
echo shar: Extracting \"funcs/src/asinh.c\" \(2315 characters\)
sed "s/^X//" >funcs/src/asinh.c <<'END_OF_funcs/src/asinh.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * asinh double precision hyperbolic arc sine
X *
X * KEY WORDS
X *
X * asinh
X * machine independent routines
X * math libraries
X *
X * DESCRIPTION
X *
X * Returns double precision hyperbolic arc sine of double precision
X * floating point number.
X *
X * USAGE
X *
X * double asinh (x)
X * double x;
X *
X * RESTRICTIONS
X *
X * The domain of the ASINH function is the entire real axis
X * however the evaluation of x squared may cause overflow
X * for large magnitudes.
X *
X * For precision information refer to documentation of the
X * floating point library routines called.
X *
X * PROGRAMMER
X *
X * Fred Fish
X *
X * INTERNALS
X *
X * Computes asinh(x) from:
X *
X * 1. Let xmax = sqrt(MAXDOUBLE - 1)
X *
X * 2. If x < -xmax or xmax < x then
X * let x = xmax and flag overflow.
X *
X * 3. asinh(x) = log [x+sqrt(x**2 + 1)]
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
Xstatic char funcname[] = "asinh";
X
X
Xdouble asinh (x)
Xdouble x;
X{
X auto struct exception xcpt;
X extern double log ();
X extern double sqrt ();
X
X DBUG_ENTER (funcname);
X DBUG_3 ("asinhin", "arg %le", x);
X if (x < -SQRT_MAXDOUBLE || x > SQRT_MAXDOUBLE) {
X xcpt.type = OVERFLOW;
X xcpt.name = funcname;
X xcpt.arg1 = x;
X if (!matherr (&xcpt)) {
X fprintf (stderr, "%s: OVERFLOW error\n", funcname);
X errno = ERANGE;
X xcpt.retval = log (2 * SQRT_MAXDOUBLE);
X }
X } else {
X xcpt.retval = log (x + sqrt(x*x + 1.0));
X }
X DBUG_3 ("asinhout", "result %le", xcpt.retval);
X DBUG_RETURN (xcpt.retval);
X}
END_OF_funcs/src/asinh.c
if test 2315 -ne `wc -c <funcs/src/asinh.c`; then
echo shar: \"funcs/src/asinh.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/atan2.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/atan2.c\"
else
echo shar: Extracting \"funcs/src/atan2.c\" \(2363 characters\)
sed "s/^X//" >funcs/src/atan2.c <<'END_OF_funcs/src/atan2.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * atan2 double precision arc tangent of two arguments
X *
X * KEY WORDS
X *
X * atan2
X * machine independent routines
X * trigonometric functions
X * math libraries
X *
X * DESCRIPTION
X *
X * Returns double precision arc tangent of two
X * double precision floating point arguments ( atan(Y/X) ).
X *
X * USAGE
X *
X * double atan2(x,y)
X * double x;
X * double y;
X *
X * REFERENCES
X *
X * Fortran 77 user's guide, Digital Equipment Corp. pp B-4.
X *
X * RESTRICTIONS
X *
X * Note that the argument usage is exactly the reverse of the
X * common FORTRAN usage where atan2(x,y) computes atan(x/y).
X * The usage here is less confusing than remembering that x is
X * really y and y is really x.
X *
X * For precision information refer to documentation of the
X * other floating point library routines called.
X *
X * PROGRAMMER
X *
X * Fred Fish
X * Tempe, Az 85281
X *
X * INTERNALS
X *
X * Computes atan(y/x) from:
X *
X * 1. If x = 0 then
X * atan(x,y) = PI/2 * (sign(y))
X *
X * 2. If x > 0 then
X * atan(x,y) = atan(y/x)
X *
X * 3. If x < 0 then atan2(x,y) =
X * PI*(sign(y)) + atan(y/x)
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
X
Xdouble atan2 (x, y)
Xdouble x;
Xdouble y;
X{
X double result;
X extern double sign();
X extern double atan();
X
X ENTER ("atan2");
X DEBUG4 ("atan2in", "x = %le y = %le", x, y);
X if (x == 0.0) {
X result = sign (HALFPI, y);
X } else if (x > 0.0) {
X result = atan (y/x);
X } else {
X result = atan (y/x) + sign (PI, y);
X }
X DEBUG3 ("atan2out", "result %le", result);
X LEAVE ();
X return (result);
X}
END_OF_funcs/src/atan2.c
if test 2363 -ne `wc -c <funcs/src/atan2.c`; then
echo shar: \"funcs/src/atan2.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/atanh.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/atanh.c\"
else
echo shar: Extracting \"funcs/src/atanh.c\" \(2301 characters\)
sed "s/^X//" >funcs/src/atanh.c <<'END_OF_funcs/src/atanh.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * atanh double precision hyperbolic arc tangent
X *
X * KEY WORDS
X *
X * atanh
X * machine independent routines
X * math libraries
X *
X * DESCRIPTION
X *
X * Returns double precision hyperbolic arc tangent of double precision
X * floating point number.
X *
X * USAGE
X *
X * double atanh (x)
X * double x;
X *
X * RESTRICTIONS
X *
X * The range of the atanh function is -1.0 to +1.0 exclusive.
X * Certain pathological cases near 1.0 may cause overflow
X * in evaluation of 1+x / 1-x, depending upon machine exponent
X * range and mantissa precision.
X *
X * For precision information refer to documentation of the
X * other floating point library routines called.
X *
X * PROGRAMMER
X *
X * Fred Fish
X *
X * INTERNALS
X *
X * Computes atanh(x) from:
X *
X * 1. If x <= -1.0 or x >= 1.0
X * then report argument out of
X * range and return 0.0
X *
X * 2. atanh(x) = 0.5 * log((1+x)/(1-x))
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
Xstatic char funcname[] = "atanh";
X
X
Xdouble atanh (x)
Xdouble x;
X{
X auto struct exception xcpt;
X extern double log ();
X
X DBUG_ENTER (funcname);
X DBUG_3 ("atanhin", "arg %le", x);
X if (x <= -1.0 || x >= 1.0) {
X xcpt.type = DOMAIN;
X xcpt.name = funcname;
X xcpt.arg1 = x;
X if (!matherr (&xcpt)) {
X fprintf (stderr, "%s: DOMAIN error\n", funcname);
X errno = ERANGE;
X xcpt.retval = 0.0;
X }
X } else {
X xcpt.retval = 0.5 * log ((1+x) / (1-x));
X }
X DBUG_3 ("atanhout", "result %le", xcpt.retval);
X DBUG_RETURN (xcpt.retval);
X}
END_OF_funcs/src/atanh.c
if test 2301 -ne `wc -c <funcs/src/atanh.c`; then
echo shar: \"funcs/src/atanh.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/cacos.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/cacos.c\"
else
echo shar: Extracting \"funcs/src/cacos.c\" \(1983 characters\)
sed "s/^X//" >funcs/src/cacos.c <<'END_OF_funcs/src/cacos.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * cacos complex double precision arc cosine
X *
X * KEY WORDS
X *
X * cacos
X * complex functions
X * machine independent routines
X * math libraries
X *
X * DESCRIPTION
X *
X * Computes double precision complex arc cosine of
X * a double precision complex argument.
X *
X * USAGE
X *
X * COMPLEX cacos (z)
X * COMPLEX z;
X *
X * PROGRAMMER
X *
X * Fred Fish
X * Tempe,Az 85281
X * (602) 966-8871
X *
X * INTERNALS
X *
X * Computes complex arc cosine of z = x + jy from:
X *
X * cacos(z) = -j * clog(z + j * csqrt(1-z*z))
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
X
XCOMPLEX cacos (z)
XCOMPLEX z;
X{
X COMPLEX temp;
X double swaptemp;
X extern COMPLEX cmult (), csqrt (), clog ();
X
X ENTER ("cacos");
X DEBUG4 ("cacosin", "arg %le %le", z.real, z.imag);
X temp = cmult(z, z);
X temp.real = 1.0 - temp.real;
X temp.imag = -temp.imag;
X temp = csqrt (temp);
X swaptemp = temp.real;
X temp.real = -temp.imag;
X temp.imag = swaptemp;
X temp.real += z.real;
X temp.imag += z.imag;
X temp = clog (temp);
X z.real = temp.imag;
X z.imag = -temp.real;
X DEBUG4 ("cacosout", "result %le %le", z.real, z.imag);
X LEAVE ();
X return (z);
X}
X
END_OF_funcs/src/cacos.c
if test 1983 -ne `wc -c <funcs/src/cacos.c`; then
echo shar: \"funcs/src/cacos.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/cdiv.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/cdiv.c\"
else
echo shar: Extracting \"funcs/src/cdiv.c\" \(2460 characters\)
sed "s/^X//" >funcs/src/cdiv.c <<'END_OF_funcs/src/cdiv.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * cdiv double precision complex division
X *
X * KEY WORDS
X *
X * cdiv
X * complex functions
X * machine independent routines
X * math libraries
X *
X * DESCRIPTION
X *
X * Computes double precision complex result of division of
X * first double precision complex argument by second double
X * precision complex argument.
X *
X * USAGE
X *
X * COMPLEX cdiv (numerator, denominator)
X * COMPLEX numerator;
X * COMPLEX denominator;
X *
X * PROGRAMMER
X *
X * Fred Fish
X * Tempe, Az 85281
X * (602) 966-8871
X *
X * INTERNALS
X *
X * Computes cdiv(znum,zden) from:
X *
X * 1. Let znum = a + j b
X * Let zden = c + j d
X *
X * 2. denom = c*c + d*d
X *
X * 3. If denom is zero then log error,
X * set r_cdiv = maximum floating value,
X * i_cdiv = 0, and go to step 5.
X *
X * 4. r_cdiv = (a*c + b*d) / denom
X * i_cdiv = (c*b - a*d) / denom
X *
X * 5. Then cdiv(znum,zden) = r_cdiv + j i_cdiv
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
X
XCOMPLEX cdiv (znum, zden)
XCOMPLEX znum;
XCOMPLEX zden;
X{
X COMPLEX result;
X double denom;
X
X ENTER ("cdiv");
X DEBUG4 ("cdivin", "arg1 %le %le", znum.real, znum.imag);
X DEBUG4 ("cdivin", "arg2 %le %le", zden.real, zden.imag);
X denom = (zden.real * zden.real) + (zden.imag * zden.imag);
X if (denom == 0.0) {
X/****
X pmlerr(C_DIV_ZERO);
X result.real = MAX_POS_DBLF;
X******/
X result.real = 0.0; /* TERRIBLY WRONG! */
X result.imag = 0.0;
X } else {
X result.real = ((znum.real*zden.real)+(znum.imag*zden.imag)) / denom;
X result.imag = ((zden.real*znum.imag)-(znum.real*zden.imag)) / denom;
X }
X DEBUG4 ("cdivout", "result %le %le", result.real, result.imag);
X LEAVE ();
X return (result);
X}
END_OF_funcs/src/cdiv.c
if test 2460 -ne `wc -c <funcs/src/cdiv.c`; then
echo shar: \"funcs/src/cdiv.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/cmult.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/cmult.c\"
else
echo shar: Extracting \"funcs/src/cmult.c\" \(1994 characters\)
sed "s/^X//" >funcs/src/cmult.c <<'END_OF_funcs/src/cmult.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * cmult double precision complex multiplication
X *
X * KEY WORDS
X *
X * cmult
X * complex functions
X * machine independent routines
X * math libraries
X *
X * DESCRIPTION
X *
X * Computes double precision complex result of multiplication of
X * first double precision complex argument by second double
X * precision complex argument.
X *
X * USAGE
X *
X * COMPLEX cmult (z1, z2)
X * COMPLEX z1;
X * COMPLEX z2;
X *
X * PROGRAMMER
X *
X * Fred Fish
X * Tempe, Az 85281
X * (602) 966-8871
X *
X * INTERNALS
X *
X * Computes cmult(z1,z2) from:
X *
X * 1. Let z1 = a + j b
X * Let z2 = c + j d
X *
X * 2. r_cmult = (a*c - b*d)
X * i_cmult = (a*d + c*b)
X *
X * 3. Then cmult(z1,z2) = r_cmult + j i_cmult
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
X
XCOMPLEX cmult (z1, z2)
XCOMPLEX z1;
XCOMPLEX z2;
X{
X COMPLEX result;
X
X ENTER ("cmult");
X DEBUG4 ("cmultin", "arg1 %le %le", z1.real, z1.imag);
X DEBUG4 ("cmultin", "arg2 %le %le", z2.real, z2.imag);
X result.real = (z1.real * z2.real) - (z1.imag * z2.imag);
X result.imag = (z1.real * z2.imag) + (z2.real * z1.imag);
X DEBUG4 ("cmultout", "result %le %le", result.real, result.imag);
X LEAVE ();
X return (result);
X}
END_OF_funcs/src/cmult.c
if test 1994 -ne `wc -c <funcs/src/cmult.c`; then
echo shar: \"funcs/src/cmult.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/cosh.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/cosh.c\"
else
echo shar: Extracting \"funcs/src/cosh.c\" \(2424 characters\)
sed "s/^X//" >funcs/src/cosh.c <<'END_OF_funcs/src/cosh.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * cosh double precision hyperbolic cosine
X *
X * KEY WORDS
X *
X * cosh
X * machine independent routines
X * math libraries
X *
X * DESCRIPTION
X *
X * Returns double precision hyperbolic cosine of double precision
X * floating point number.
X *
X * USAGE
X *
X * double cosh (x)
X * double x;
X *
X * REFERENCES
X *
X * Fortran IV plus user's guide, Digital Equipment Corp. pp B-4
X *
X * RESTRICTIONS
X *
X * Inputs greater than log(MAXDOUBLE) result in overflow.
X * Inputs less than log(MINDOUBLE) result in underflow.
X *
X * For precision information refer to documentation of the
X * floating point library routines called.
X *
X * PROGRAMMER
X *
X * Fred Fish
X *
X * INTERNALS
X *
X * Computes hyperbolic cosine from:
X *
X * cosh(X) = 0.5 * (exp(X) + exp(-X))
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
Xstatic char funcname[] = "cosh";
X
X
Xdouble cosh (x)
Xdouble x;
X{
X auto struct exception xcpt;
X extern double exp ();
X
X DBUG_ENTER (funcname);
X DBUG_3 ("coshin", "arg %le", x);
X if (x > LOGE_MAXDOUBLE) {
X xcpt.type = OVERFLOW;
X xcpt.name = funcname;
X xcpt.arg1 = x;
X if (!matherr (&xcpt)) {
X fprintf (stderr, "%s: OVERFLOW error\n", funcname);
X errno = ERANGE;
X xcpt.retval = MAXDOUBLE;
X }
X } else if (x < LOGE_MINDOUBLE) {
X xcpt.type = UNDERFLOW;
X xcpt.name = funcname;
X xcpt.arg1 = x;
X if (!matherr (&xcpt)) {
X fprintf (stderr, "%s: UNDERFLOW error\n", funcname);
X errno = ERANGE;
X xcpt.retval = MINDOUBLE;
X }
X } else {
X x = exp (x);
X xcpt.retval = 0.5 * (x + 1.0/x);
X }
X DBUG_3 ("coshout", "result %le", xcpt.retval);
X DBUG_RETURN (xcpt.retval);
X}
END_OF_funcs/src/cosh.c
if test 2424 -ne `wc -c <funcs/src/cosh.c`; then
echo shar: \"funcs/src/cosh.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/csqrt.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/csqrt.c\"
else
echo shar: Extracting \"funcs/src/csqrt.c\" \(2679 characters\)
sed "s/^X//" >funcs/src/csqrt.c <<'END_OF_funcs/src/csqrt.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * csqrt complex double precision square root
X *
X * KEY WORDS
X *
X * csqrt
X * machine independent routines
X * complex functions
X * math libraries
X *
X * DESCRIPTION
X *
X * Computes double precision complex square root of
X * a double precision complex argument.
X *
X * USAGE
X *
X * COMPLEX csqrt (z)
X * COMPLEX z;
X *
X * REFERENCES
X *
X * Fortran 77 user's guide, Digital Equipment Corp. pp B-12
X *
X * RESTRICTIONS
X *
X * The relative error in the double precision square root
X * computation is 10**(-30.1) after three applications
X * of Heron's iteration for the square root.
X *
X * However, this assumes exact arithmetic in the iterations
X * and initial approximation. Additional errors may occur
X * due to truncation, rounding, or machine precision limits.
X *
X * PROGRAMMER
X *
X * Fred Fish
X * Tempe, Az 85281
X * (602) 966-8871
X *
X * INTERNALS
X *
X * Computes complex square root of z = x + j y from:
X *
X * 1. If z = 0 + j 0 then return z.
X *
X * 2. root = sqrt((dabs(x) + cabs(z)) / 2)
X *
X * 3. q = y / (2 * root)
X *
X * 4. If x >= 0 then
X * csqrt(z) = (root,q)
X *
X * 5. If x < 0 and y >= 0 then
X * csqrt(z) = (q,root)
X *
X * 6. If x < 0 and y < 0 then
X * csqrt(z) = (-q,root)
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
X
XCOMPLEX csqrt (z)
XCOMPLEX z;
X{
X double root, q;
X extern double dabs(), sqrt(), cabs ();
X
X ENTER ("csqrt");
X DEBUG4 ("csqrtin", "arg %le %le", z.real, z.imag);
X if (z.real != 0.0 || z.imag != 0.0) {
X root = sqrt (0.5 * (dabs (z.real) + cabs (z)));
X q = z.imag / (2.0 * root);
X if (z.real >= 0.0) {
X z.real = root;
X z.imag = q;
X } else if (z.imag < 0.0) {
X z.real = -q;
X z.imag = -root;
X } else {
X z.real = q;
X z.imag = root;
X }
X }
X DEBUG4 ("csqrtout", "result %le %le", z.real, z.imag);
X LEAVE ();
X return (z);
X}
END_OF_funcs/src/csqrt.c
if test 2679 -ne `wc -c <funcs/src/csqrt.c`; then
echo shar: \"funcs/src/csqrt.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/csubt.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/csubt.c\"
else
echo shar: Extracting \"funcs/src/csubt.c\" \(2005 characters\)
sed "s/^X//" >funcs/src/csubt.c <<'END_OF_funcs/src/csubt.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * csubt double precision complex subtraction
X *
X * KEY WORDS
X *
X * csubt
X * machine independent routines
X * complex functions
X * math libraries
X *
X * DESCRIPTION
X *
X * Computes double precision complex result of subtraction of
X * second double precision complex argument from first double
X * precision complex argument.
X *
X * Note that the complex subtraction function is so simple that
X * it would not normally be called as a function but simply
X * done "inline". It is supplied mostly for completeness.
X *
X * USAGE
X *
X * COMPLEX csubt (z1, z2)
X * COMPLEX z1;
X * COMPLEX z2;
X *
X * PROGRAMMER
X *
X * Fred Fish
X * Tempe, Az
X * (602) 966-8871
X *
X * INTERNALS
X *
X * Computes csubt (z1, z2) from:
X *
X * 1. Let z1 = a + j b
X * Let z2 = c + j d
X *
X * 2. Then csubt(z1,z2) = (a - c) + j (b - d)
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
X
XCOMPLEX csubt (z1, z2)
XCOMPLEX z1;
XCOMPLEX z2;
X{
X ENTER ("csubt");
X DEBUG4 ("csubtin", "arg %le %le", z1.real, z1.imag);
X DEBUG4 ("csubtin", "arg2 %le %le", z2.real, z2.imag);
X z1.real -= z2.real;
X z1.imag -= z2.imag;
X DEBUG4 ("csubtout", "result %le %le", z1.real, z1.imag);
X LEAVE ();
X return (z1);
X}
END_OF_funcs/src/csubt.c
if test 2005 -ne `wc -c <funcs/src/csubt.c`; then
echo shar: \"funcs/src/csubt.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/poly.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/poly.c\"
else
echo shar: Extracting \"funcs/src/poly.c\" \(2049 characters\)
sed "s/^X//" >funcs/src/poly.c <<'END_OF_funcs/src/poly.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * poly double precision polynomial evaluation
X *
X * KEY WORDS
X *
X * poly
X * machine independent routines
X * math libraries
X *
X * DESCRIPTION
X *
X * Evaluates a polynomial and returns double precision
X * result. Is passed a the order of the polynomial,
X * a pointer to an array of double precision polynomial
X * coefficients (in ascending order), and the independent
X * variable.
X *
X * USAGE
X *
X * double poly (order, coeffs, x)
X * int order;
X * double *coeffs;
X * double x;
X *
X * PROGRAMMER
X *
X * Fred Fish
X *
X * INTERNALS
X *
X * Evalates the polynomial using recursion and the form:
X *
X * P(x) = P0 + x(P1 + x(P2 +...x(Pn)))
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
X
Xdouble poly (order, coeffs, x)
Xregister int order;
Xdouble *coeffs;
Xdouble x;
X{
X auto double curr_coeff;
X auto double rtn_value;
X
X DBUG_ENTER ("poly");
X DBUG_5 ("polyin", "args %d %#x %le", order, coeffs, x);
X if (order <= 0) {
X rtn_value = *coeffs;
X } else {
X curr_coeff = *coeffs; /* Bug in Unisoft's compiler. Does not */
X coeffs++; /* generate good code for *coeffs++ */
X rtn_value = curr_coeff + x * poly (--order, coeffs, x);
X }
X DBUG_3 ("polyout", "result %le", rtn_value);
X DBUG_RETURN (rtn_value);
X}
END_OF_funcs/src/poly.c
if test 2049 -ne `wc -c <funcs/src/poly.c`; then
echo shar: \"funcs/src/poly.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/sinh.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/sinh.c\"
else
echo shar: Extracting \"funcs/src/sinh.c\" \(2423 characters\)
sed "s/^X//" >funcs/src/sinh.c <<'END_OF_funcs/src/sinh.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * sinh double precision hyperbolic sine
X *
X * KEY WORDS
X *
X * sinh
X * machine independent routines
X * math libraries
X *
X * DESCRIPTION
X *
X * Returns double precision hyperbolic sine of double precision
X * floating point number.
X *
X * USAGE
X *
X * double sinh (x)
X * double x;
X *
X * REFERENCES
X *
X * Fortran IV plus user's guide, Digital Equipment Corp. pp B-5
X *
X * RESTRICTIONS
X *
X * Inputs greater than ln(MAXDOUBLE) result in overflow.
X * Inputs less than ln(MINDOUBLE) result in underflow.
X *
X * For precision information refer to documentation of the
X * floating point library routines called.
X *
X * PROGRAMMER
X *
X * Fred Fish
X *
X * INTERNALS
X *
X * Computes hyperbolic sine from:
X *
X * sinh(x) = 0.5 * (exp(x) - 1.0/exp(x))
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
Xstatic char funcname[] = "sinh";
X
X
Xdouble sinh (x)
Xdouble x;
X{
X extern double exp ();
X auto struct exception xcpt;
X
X DBUG_ENTER (funcname);
X DBUG_3 ("sinhin", "arg %le", x);
X if (x > LOGE_MAXDOUBLE) {
X xcpt.type = OVERFLOW;
X xcpt.name = funcname;
X xcpt.arg1 = x;
X if (!matherr (&xcpt)) {
X fprintf (stderr, "%s: OVERFLOW error\n", funcname);
X errno = ERANGE;
X xcpt.retval = MAXDOUBLE;
X }
X } else if (x < LOGE_MINDOUBLE) {
X xcpt.type = UNDERFLOW;
X xcpt.name = funcname;
X xcpt.arg1 = x;
X if (!matherr (&xcpt)) {
X fprintf (stderr, "%s: UNDERFLOW error\n", funcname);
X errno = ERANGE;
X xcpt.retval = MINDOUBLE;
X }
X } else {
X x = exp (x);
X xcpt.retval = 0.5 * (x - (1.0 / x));
X }
X DBUG_3 ("sinhout", "result %le", xcpt.retval);
X DBUG_RETURN (xcpt.retval);
X}
END_OF_funcs/src/sinh.c
if test 2423 -ne `wc -c <funcs/src/sinh.c`; then
echo shar: \"funcs/src/sinh.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/tan.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/tan.c\"
else
echo shar: Extracting \"funcs/src/tan.c\" \(2208 characters\)
sed "s/^X//" >funcs/src/tan.c <<'END_OF_funcs/src/tan.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * tan Double precision tangent
X *
X * KEY WORDS
X *
X * tan
X * machine independent routines
X * trigonometric functions
X * math libraries
X *
X * DESCRIPTION
X *
X * Returns tangent of double precision floating point number.
X *
X * USAGE
X *
X * double tan (x)
X * double x;
X *
X * INTERNALS
X *
X * Computes the tangent from tan(x) = sin(x) / cos(x).
X *
X * If cos(x) = 0 and sin(x) >= 0, then returns largest
X * floating point number on host machine.
X *
X * If cos(x) = 0 and sin(x) < 0, then returns smallest
X * floating point number on host machine.
X *
X * REFERENCES
X *
X * Fortran IV plus user's guide, Digital Equipment Corp. pp. B-8
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
Xstatic char funcname[] = "tan";
X
Xdouble tan (x)
Xdouble x;
X{
X double sinx;
X double cosx;
X auto struct exception xcpt;
X extern double sin ();
X extern double cos();
X
X DBUG_ENTER (funcname);
X DBUG_3 ("tanin", "arg %le", x);
X sinx = sin (x);
X cosx = cos (x);
X if (cosx == 0.0) {
X xcpt.type = OVERFLOW;
X xcpt.name = funcname;
X xcpt.arg1 = x;
X if (!matherr (&xcpt)) {
X fprintf (stderr, "%s: OVERFLOW error\n", funcname);
X errno = ERANGE;
X if (sinx >= 0.0) {
X xcpt.retval = MAXDOUBLE;
X } else {
X xcpt.retval = -MAXDOUBLE;
X }
X }
X } else {
X xcpt.retval = sinx / cosx;
X }
X DBUG_3 ("tanout", "result %le", xcpt.retval);
X DBUG_RETURN (xcpt.retval);
X}
END_OF_funcs/src/tan.c
if test 2208 -ne `wc -c <funcs/src/tan.c`; then
echo shar: \"funcs/src/tan.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/src/tanh.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/src/tanh.c\"
else
echo shar: Extracting \"funcs/src/tanh.c\" \(2312 characters\)
sed "s/^X//" >funcs/src/tanh.c <<'END_OF_funcs/src/tanh.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X
X/*
X * FUNCTION
X *
X * tanh double precision hyperbolic tangent
X *
X * KEY WORDS
X *
X * tanh
X * machine independent routines
X * math libraries
X *
X * DESCRIPTION
X *
X * Returns double precision hyperbolic tangent of double precision
X * floating point number.
X *
X * USAGE
X *
X * double tanh (x)
X * double x;
X *
X * REFERENCES
X *
X * Fortran IV plus user's guide, Digital Equipment Corp. pp B-5
X *
X * RESTRICTIONS
X *
X * For precision information refer to documentation of the
X * floating point library routines called.
X *
X * PROGRAMMER
X *
X * Fred Fish
X *
X * INTERNALS
X *
X * Computes hyperbolic tangent from:
X *
X * tanh(x) = 1.0 for x > TANH_MAXARG
X * = -1.0 for x < -TANH_MAXARG
X * = sinh(x) / cosh(x) otherwise
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
Xstatic char funcname[] = "tanh";
X
X
Xdouble tanh (x)
Xdouble x;
X{
X auto struct exception xcpt;
X register int positive;
X extern double sinh ();
X extern double cosh ();
X
X DBUG_ENTER (funcname);
X DBUG_3 ("tanhin", "arg %le", x);
X if (x > TANH_MAXARG || x < -TANH_MAXARG) {
X if (x > 0.0) {
X positive = 1;
X } else {
X positive = 0;
X }
X xcpt.type = PLOSS;
X xcpt.name = funcname;
X xcpt.arg1 = x;
X if (!matherr (&xcpt)) {
X fprintf (stderr, "%s: PLOSS error\n", funcname);
X errno = ERANGE;
X if (positive) {
X xcpt.retval = 1.0;
X } else {
X xcpt.retval = -1.0;
X }
X }
X } else {
X xcpt.retval = sinh (x) / cosh (x);
X }
X DBUG_3 ("tanhout", "result %le", xcpt.retval);
X return (xcpt.retval);
X}
END_OF_funcs/src/tanh.c
if test 2312 -ne `wc -c <funcs/src/tanh.c`; then
echo shar: \"funcs/src/tanh.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f funcs/unused/dint.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"funcs/unused/dint.c\"
else
echo shar: Extracting \"funcs/unused/dint.c\" \(2630 characters\)
sed "s/^X//" >funcs/unused/dint.c <<'END_OF_funcs/unused/dint.c'
X/************************************************************************
X * *
X * N O T I C E *
X * *
X * Copyright Abandoned, 1987, Fred Fish *
X * *
X * This previously copyrighted work has been placed into the *
X * public domain by the author (Fred Fish) and may be freely used *
X * for any purpose, private or commercial. I would appreciate *
X * it, as a courtesy, if this notice is left in all copies and *
X * derivative works. Thank you, and enjoy... *
X * *
X * The author makes no warranty of any kind with respect to this *
X * product and explicitly disclaims any implied warranties of *
X * merchantability or fitness for any particular purpose. *
X * *
X ************************************************************************
X */
X
X/*
X * FUNCTION
X *
X * dint double precision integer portion
X *
X * KEY WORDS
X *
X * dint
X * machine dependent routines
X * math libraries
X *
X * DESCRIPTION
X *
X * Returns integer portion of double precision number as double
X * precision number.
X *
X * USAGE
X *
X * double dint(x)
X * double x;
X *
X * PROGRAMMER
X *
X * Fred Fish
X * Tempe, Az 85281
X * (602) 966-8871
X *
X * RESTRICTIONS
X *
X * The current DEC-20 C system treats double as float. This
X * routine will need to be modified when true double precision
X * is implemented.
X *
X */
X
X#include <stdio.h>
X#include <pmluser.h>
X#include "pml.h"
X
X
X#ifdef PDP10
X
X#define W1_FBITS 27 /* Number of fractional bits in word 1 */
X#define WORD_MASK 0777777777777 /* Mask for all 36 bits of first word */
X
Xdouble dint(x)
Xdouble x;
X{
X register int *vpntr, exponent;
X int xexp();
X
X vpntr = &x;
X if ((exponent=xexp(x)) <= 0) {
X x = 0.0;
X } else if (exponent <= W1_FBITS) {
X *vpntr &= (WORD_MASK << (W1_FBITS - exponent));
X } else {
X pmlerr(DINT_2BIG);
X x = 0.0;
X }
X if (x < 0.0) {
X x += 1.0;
X }
X return (x);
X}
X
X#else
X
X#define W1_FBITS 24 /* (NOTE HIDDEN BIT NORMALIZATION) */
X#define W2_FBITS 32 /* Number of fractional bits in word 2 */
X#define WORD_MASK 0xFFFFFFFF /* Mask for each long word of double */
X
Xstatic union {
X double dval;
X long lval[2];
X} share;
X
Xdouble dint(x)
Xdouble x;
X{
X int exponent, xexp(), fbitdown;
X register long *lpntr;
X
X lpntr = &share.lval[0];
X share.dval = x;
X if ((exponent=xexp(x)) <= 0) {
X share.dval = 0.0;
X } else if (exponent <= W1_FBITS) {
X *lpntr++ &= (WORD_MASK << (W1_FBITS - exponent));
X *lpntr++ = 0;
X } else if (exponent <= (fbitdown = W1_FBITS+W2_FBITS)) {
X lpntr++;
X *lpntr++ &= (WORD_MASK << (fbitdown - exponent));
X } else {
X pmlerr(DINT_2BIG);
X }
X return (share.dval);
X}
X#endif
END_OF_funcs/unused/dint.c
if test 2630 -ne `wc -c <funcs/unused/dint.c`; then
echo shar: \"funcs/unused/dint.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 2 \(of 6\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 3 4 5 6 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 6 archives.
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0
--
= Drug tests; just say *NO*! (Moto just announced new drug testing program) =
= Fred Fish Motorola Computer Division, 3013 S 52nd St, Tempe, Az 85282 USA =
= seismo!noao!mcdsun!fnf (602) 438-5976 =