/******************************************************************
* *
* File : llnlmath.c *
* Programmers : Scott D. Cohen and Alan C. Hindmarsh @ LLNL *
* Last Modified : 1 September 1994 *
*----------------------------------------------------------------*
* This is the implementation file for a C math library. *
* *
******************************************************************/
#include <stdio.h>
#include <math.h>
#include "llnlmath.h"
#include "llnltyps.h"
#define ZERO RCONST(0.0)
#define ONE RCONST(1.0)
#define TWO RCONST(2.0)
real UnitRoundoff(void)
{
real u;
volatile real one_plus_u;
u = ONE;
one_plus_u = ONE + u;
while (one_plus_u != ONE) {
u /= TWO;
one_plus_u = ONE + u;
}
u *= TWO;
return(u);
}
real RPowerI(real base, int exponent)
{
int i, expt;
real prod;
prod = ONE;
expt = ABS(exponent);
for(i=1; i <= expt; i++) prod *= base;
if (exponent < 0) prod = ONE/prod;
return(prod);
}
real RPowerR(real base, real exponent)
{
if (base <= ZERO) return(ZERO);
return((real)pow((double)base,(double)exponent));
}
real RSqrt(real x)
{
if (x <= ZERO) return(ZERO);
return((real) sqrt((double) x));
}
syntax highlighted by Code2HTML, v. 0.9.1