Math

The Math component provides a wrapper around several math functions normally defined in the standard C library. This component was implemented primarily due to undiagosed incompatiblities when trying to access C++ math libraries from within OpenXDS.

Usage

Linkage:

-lopenxds_core_base

To use the Math component:

#include <openxds.core.base/Math.h>

Function Summary

ReturnsMethod-nameParameters
long Math_contrainBetween long aNumber long lower long upper
bool Math_isAlmostEqual double a double b
bool Math_isBetween long aNumber long lower long upper
double Math_floor double aValue
long Math_max long a long b
long Math_min long a long b
double Math_pi
long Math_sizeOfRange double first double lastdouble increment
double Math_squareroot double aValue
double Math_toPower double base double power
long doubleMath_toPower_long_doublelong double baselong double power
float Math_toPower_float float base float power

Dependencies

#include "openxds.core.base/Math.h"
#include <math.h>

Functions


constrain Between
EXPORT	long Math_constrainBetween( long aNumber, long lower, long upper );

Parameters

aNumber, that should be constrained between the bounds lower and upper;

lower, the lower bound;

upper, the upper bound;

Returns

aNumber if it lies between lower and upper; otherwise returns either lower if less than lower, or upper if greater than upper.

Implementation

long
Math_constrainBetween( long aNumber, long lower, long upper )
{
	if ( aNumber < lower )
	{
		aNumber = lower;
	}
	else if ( upper < aNumber )
	{
		aNumber = upper;
	}
	return aNumber;
}

is Almost Equal
EXPORT	bool Math_isAlmostEqual( double a, double b );

Parameters

a;

b;

Returns

TRUE if |a - b| < 0.1

Implementation

bool
Math_isAlmostEqual( double a, double b )
{
	return ( (a == b) || (0.00001 > fabs( a - b )) );
}

is Between
EXPORT	bool Math_isBetween( long aNumber, long lower, long upper );

Parameters

aNumber;

lower;

upper;

Returns

TRUE if lower < aNumber < upper; otherwise FALSE.

Implementation

bool Math_isBetween( long aNumber, long lower, long upper )
{
	return ((lower < aNumber) && (aNumber < upper ));
}

floor
EXPORT	double Math_floor( double aValue );

Parameters

aValue;

Returns

aValue, rounded down to the nearest integer.

Implementation

double
Math_floor( double aValue )
{
	int anInteger = (int) aValue;
	double aDouble = (double) anInteger;
	if ( aDouble > aValue )
	{
		anInteger -= 1;
		aDouble = (double) anInteger;
	}
	return aDouble;
}

max
EXPORT	long Math_max( long a, long b );

Parameters

a;

b;

Returns

a, if a > b; otherwise b.

Implementation

long
Math_max( long a, long b )
{
	return (a > b) ? a : b;
}

min
EXPORT	long Math_min( long a, long b );

Parameters

a;

b;

Returns

a, if a < b; otherwise b;

Implementation

long
Math_min( long a, long b )
{
	return (a < b) ? a : b;
}

pi
EXPORT	double Math_pi(void);

Returns

The value of pi to 8 decimal places.

Implementation

double
Math_pi()
{
	return 3.14159265;
}

size Of Range
EXPORT	long Math_sizeOfRange( double first, double last, double increment );

Parameters

first;

last;

increment;

Returns

The number of times that first can be incremented by increment before reaching last.

Implementation

long
Math_sizeOfRange( double first, double last, double increment )
{
	int size = 0;
	double i;

	if ( Math_isAlmostEqual( first, last ) )
	{
		size++;
	}
	else
	{
		for ( i=first; i < last; i += increment )
		{
			size++;
		}
		if ( Math_isAlmostEqual( i, last ) )
		{
			size++;
		}
	}
	return size;
}

squareroot
EXPORT	double Math_squareroot( double aValue );

Parameters

aValue;

Returns

The square root of aValue.

Implementation

double
Math_squareroot( double aValue )
{
	return sqrt( aValue );
}

to Power (double)
EXPORT	double Math_toPower( double base, double power );

Returns

base raised to power.

Implementation

double
Math_toPower( double base, double power )
{
	return pow( base, power );
}

to Power (long double)
EXPORT	long double Math_toPower_long_double( long double base, long double power );

Returns

Returns base raised to power.

long double
Math_toPower_long_double( long double base, long double power )
{
	return powl( base, power );
}

to Power (float)
EXPORT	float Math_toPower_float( float base, float power );

Returns

base raised to power.

float
Math_toPower_float( float base, float power )
{
	return powf( base, power );
}