Files
Work/common/MATH.HPP
2024-08-07 09:09:36 -04:00

263 lines
4.8 KiB
C++

#ifndef _COMMON_MATH_HPP_
#define _COMMON_MATH_HPP_
#include <math.h>
#ifdef _MSC_VER
#if defined(min)
#undef min
#endif
#if defined(max)
#undef max
#endif
#endif
class Math
{
public:
Math(void);
virtual ~Math();
static int round(double someDouble);
static int truncate(double someDouble);
static float fraction(double someDouble);
static float square(float someFloat);
static int square(int someInt);
static float radians(float someAngleDegrees);
static float degrees(float someAngleRadians);
static float cosDegrees(float someAngleDegrees);
static float sinDegrees(float someAngleDegrees);
static float tanDegrees(float someAngleDegrees);
static double cos(double angleRadians);
static double sin(double angleRadians);
static double tan(double angleRadians);
static float power(float powerBase,int exponent);
static double power(double powerBase,double exponent);
static int power(int powerBase,int exponent);
static float log(float someFloat);
static float exp10(float someFloat);
static float sign(float someFloat);
static int sign(int someInt);
static int sqrt(int someInt);
static float sqrt(float someFloat);
static double sqrt(double someDouble);
static float min(float floatOne,float floatTwo);
static float max(float floatOne,float floatTwo);
static float min(float floatOne,float floatTwo,float floatThree);
static float max(float floatOne,float floatTwo,float floatThree);
static float min(float floatOne,float floatTwo,float floatThree,float floatFour);
static float max(float floatOne,float floatTwo,float floatThree,float floatFour);
static long factorial(long nDegree);
static float pi(void);
static float pi2(void);
static double piOver180();
static int abs(int value);
private:
static const double mscPI;
static const double msc2PI;
static const double mscLN10;
static const double mscOneOverLN10;
static const double mscPIOver180;
static const double mscPIUnder180;
};
inline
Math::Math(void)
{
}
inline
Math::~Math()
{
}
inline
int Math::round(double someDouble)
{
return (int)(someDouble+0.5);
}
inline
int Math::truncate(double someDouble)
{
return (int)someDouble;
}
inline
float Math::fraction(double someDouble)
{
int wholeNumber((int)someDouble);
return someDouble-(float)wholeNumber;
}
inline
float Math::square(float someFloat)
{
return someFloat*someFloat;
}
inline
int Math::square(int someInt)
{
return someInt*someInt;
}
inline
float Math::radians(float someAngleDegrees)
{
return (someAngleDegrees*mscPIOver180);
}
inline
float Math::degrees(float someAngleRadians)
{
return (someAngleRadians*mscPIUnder180);
}
inline
float Math::cosDegrees(float someAngleDegrees)
{
return (::cos(radians(someAngleDegrees)));
}
inline
float Math::sinDegrees(float someAngleDegrees)
{
return (::sin(radians(someAngleDegrees)));
}
inline
float Math::tanDegrees(float someAngleDegrees)
{
return (::tan(radians(someAngleDegrees)));
}
inline
float Math::log(float someFloat)
{
return (::log(someFloat)*mscOneOverLN10);
}
inline
float Math::exp10(float someFloat)
{
return (::exp(someFloat*mscLN10));
}
inline
float Math::sign(float someFloat)
{
if(0.00>someFloat)return -1.00;
else if(1.00<someFloat)return 1.00;
return 0.00;
}
inline
int Math::sign(int someInt)
{
if(0>someInt)return -1;
else if(1<someInt)return 1;
return 0;
}
inline
int Math::power(int powerBase,int exponent)
{
if(!exponent)return 1;
return (powerBase*power(powerBase,exponent-1));
}
inline
double Math::power(double powerBase,double exponent)
{
if(!exponent)return 1.00;
return ::pow(powerBase,exponent);
}
inline
float Math::min(float floatOne,float floatTwo)
{
return (floatOne<floatTwo?floatOne:floatTwo);
}
inline
float Math::max(float floatOne,float floatTwo)
{
return (floatOne<floatTwo?floatTwo:floatOne);
}
inline
float Math::min(float floatOne,float floatTwo,float floatThree)
{
return min(min(floatOne,floatTwo),floatThree);
}
inline
float Math::max(float floatOne,float floatTwo,float floatThree)
{
return max(max(floatOne,floatTwo),floatThree);
}
inline
float Math::min(float floatOne,float floatTwo,float floatThree,float floatFour)
{
return min(min(floatOne,floatTwo,floatThree),floatFour);
}
inline
float Math::max(float floatOne,float floatTwo,float floatThree,float floatFour)
{
return max(max(floatOne,floatTwo,floatThree),floatFour);
}
inline
double Math::cos(double angleRadians)
{
return ::cos(angleRadians);
}
inline
double Math::sin(double angleRadians)
{
return ::sin(angleRadians);
}
inline
double Math::tan(double angleRadians)
{
return ::tan(angleRadians);
}
inline
double Math::sqrt(double someDouble)
{
return ::sqrt(someDouble);
}
inline
float Math::sqrt(float someFloat)
{
return ::sqrt(someFloat);
}
inline
int Math::abs(int value)
{
return (value<0?-value:value);
}
inline
float Math::pi(void)
{
return mscPI;
}
inline
float Math::pi2(void)
{
return msc2PI;
}
inline
double Math::piOver180()
{
return mscPIOver180;
}
#endif