You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
358 lines
7.6 KiB
358 lines
7.6 KiB
/* HMath: C++ high precision math routines
|
|
Copyright (C) 2004 Ariya Hidayat <ariya.hidayat@gmail.com>
|
|
|
|
This file was copied from the SpeedCrunch program. Please visit
|
|
http://speedcrunch.berlios.de/ for more information.
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, write to:
|
|
The Free Software Foundation, Inc.
|
|
51 Franklin Street, Fifth Floor
|
|
Boston, MA 02110-1301 USA.
|
|
|
|
*/
|
|
|
|
#ifndef HMATH_H
|
|
#define HMATH_H
|
|
|
|
#include <iostream>
|
|
|
|
class HMath;
|
|
|
|
class HNumber
|
|
{
|
|
friend class HMath;
|
|
|
|
public:
|
|
|
|
/*!
|
|
* Creates a new number.
|
|
*/
|
|
HNumber();
|
|
|
|
/*!
|
|
* Destroys this number.
|
|
*/
|
|
~HNumber();
|
|
|
|
/*!
|
|
* Copies from another number.
|
|
*/
|
|
HNumber( const HNumber& );
|
|
|
|
/*!
|
|
* Assigns from another number.
|
|
*/
|
|
HNumber& operator=( const HNumber& );
|
|
|
|
/*!
|
|
* Creates a new number from an integer value.
|
|
*/
|
|
HNumber( int i );
|
|
|
|
/*!
|
|
* Creates a new number from a string.
|
|
*/
|
|
HNumber( const char* );
|
|
|
|
/*!
|
|
* Returns true if this number is Not a Number (NaN).
|
|
*/
|
|
bool isNan() const;
|
|
|
|
/*!
|
|
* Returns true if this number is zero.
|
|
*/
|
|
bool isZero() const;
|
|
|
|
/*!
|
|
* Returns true if this number is more than zero.
|
|
*/
|
|
bool isPositive() const;
|
|
|
|
/*!
|
|
* Returns true if this number is less than zero.
|
|
*/
|
|
bool isNegative() const;
|
|
|
|
/*!
|
|
* Adds another number.
|
|
*/
|
|
HNumber operator+( const HNumber& ) const;
|
|
|
|
/*!
|
|
* Adds another number.
|
|
*/
|
|
HNumber& operator+=( const HNumber& );
|
|
|
|
/*!
|
|
* Subtract from another number.
|
|
*/
|
|
HNumber operator-( const HNumber& ) const;
|
|
|
|
/*!
|
|
* Subtract from another number.
|
|
*/
|
|
HNumber& operator-=( const HNumber& );
|
|
|
|
/*!
|
|
* Multiplies with another number.
|
|
*/
|
|
HNumber operator*( const HNumber& ) const;
|
|
|
|
/*!
|
|
* Multiplies with another number.
|
|
*/
|
|
HNumber& operator*=( const HNumber& );
|
|
|
|
/*!
|
|
* Divides with another number.
|
|
*/
|
|
HNumber operator/( const HNumber& ) const;
|
|
|
|
/*!
|
|
* Divides with another number.
|
|
*/
|
|
HNumber& operator/=( const HNumber& );
|
|
|
|
/*!
|
|
* Returns true if this number is greater than n.
|
|
*/
|
|
bool operator>( const HNumber& n ) const;
|
|
|
|
/*!
|
|
* Returns true if this number is less than n.
|
|
*/
|
|
bool operator<( const HNumber& n ) const;
|
|
|
|
/*!
|
|
* Returns true if this number is greater than or equal to n.
|
|
*/
|
|
bool operator>=( const HNumber& n ) const;
|
|
|
|
/*!
|
|
* Returns true if this number is less than or equal to n.
|
|
*/
|
|
bool operator<=( const HNumber& n ) const;
|
|
|
|
/*!
|
|
* Returns true if this number is equal to n.
|
|
*/
|
|
bool operator==( const HNumber& n ) const;
|
|
|
|
/*!
|
|
* Returns true if this number is not equal to n.
|
|
*/
|
|
bool operator!=( const HNumber& n ) const;
|
|
|
|
/*!
|
|
* Returns a NaN (Not a Number).
|
|
*/
|
|
static HNumber nan();
|
|
|
|
private:
|
|
class Private;
|
|
Private* d;
|
|
};
|
|
|
|
class TQString;
|
|
|
|
class HMath
|
|
{
|
|
public:
|
|
|
|
/*!
|
|
* Formats the given number as string, using specified decimal digits.
|
|
* Note that the returned string must be freed.
|
|
*/
|
|
static char* format( const HNumber&n, char format = 'g', int prec = -1 );
|
|
|
|
/*!
|
|
* Formats the given number as string, using specified decimal digits.
|
|
* Note that the returned string must be freed.
|
|
*/
|
|
static char* formatFixed( const HNumber&n, int prec = -1 );
|
|
|
|
/*!
|
|
* Formats the given number as string, in exponential format.
|
|
* Note that the returned string must be freed.
|
|
*/
|
|
static char* formatExp( const HNumber&n, int prec = -1 );
|
|
|
|
/*!
|
|
* Formats the given number as string, using specified decimal digits.
|
|
* Note that the returned string must be freed.
|
|
*/
|
|
static char* formatGeneral( const HNumber&n, int prec = -1 );
|
|
|
|
static TQString formatGenString( const HNumber &n, int prec = -1 );
|
|
|
|
/*!
|
|
* Returns the constant pi.
|
|
*/
|
|
static HNumber pi();
|
|
|
|
/*!
|
|
* Adds two numbers.
|
|
*/
|
|
static HNumber add( const HNumber& n1, const HNumber& n2 );
|
|
|
|
/*!
|
|
* Subtracts two numbers.
|
|
*/
|
|
static HNumber sub( const HNumber& n1, const HNumber& n2 );
|
|
|
|
/*!
|
|
* Multiplies two numbers.
|
|
*/
|
|
static HNumber mul( const HNumber& n1, const HNumber& n2 );
|
|
|
|
/*!
|
|
* Divides two numbers.
|
|
*/
|
|
static HNumber div( const HNumber& n1, const HNumber& n2 );
|
|
|
|
/*!
|
|
* Returns -1, 0, 1 if n1 is less than, equal to, or more than n2.
|
|
*/
|
|
static int compare( const HNumber& n1, const HNumber& n2 );
|
|
|
|
/*!
|
|
* Returns the absolute value of n.
|
|
*/
|
|
static HNumber abs( const HNumber& n );
|
|
|
|
/*!
|
|
* Returns the negative of n.
|
|
*/
|
|
static HNumber negate( const HNumber& n );
|
|
|
|
/*!
|
|
* Returns the integer part of n.
|
|
*/
|
|
static HNumber integer( const HNumber& n );
|
|
|
|
/*!
|
|
* Returns the fraction part of n.
|
|
*/
|
|
static HNumber frac( const HNumber& n );
|
|
|
|
/*!
|
|
* Rounds n to the specified decimal digits.
|
|
*/
|
|
static HNumber round( const HNumber&n, int prec = 0 );
|
|
|
|
/*!
|
|
* Returns the square root of n. If n is negative, returns NaN.
|
|
*/
|
|
static HNumber sqrt( const HNumber& n );
|
|
|
|
/*!
|
|
* Raises n1 to an integer n.
|
|
*/
|
|
static HNumber raise( const HNumber& n1, int n );
|
|
|
|
/*!
|
|
* Raises n1 to n2.
|
|
*/
|
|
static HNumber raise( const HNumber& n1, const HNumber& n2 );
|
|
|
|
/*!
|
|
* Returns e raised to x.
|
|
*/
|
|
static HNumber exp( const HNumber& x );
|
|
|
|
/*!
|
|
* Returns the natural logarithm of x.
|
|
* If x is non positive, returns NaN.
|
|
*/
|
|
static HNumber ln( const HNumber& x );
|
|
|
|
/*!
|
|
* Returns the base-10 logarithm of x.
|
|
* If x is non positive, returns NaN.
|
|
*/
|
|
static HNumber log( const HNumber& x );
|
|
|
|
/*!
|
|
* Returns the sine of x. Note that x must be in radians.
|
|
*/
|
|
static HNumber sin( const HNumber& x );
|
|
|
|
/*!
|
|
* Returns the cosine of x. Note that x must be in radians.
|
|
*/
|
|
static HNumber cos( const HNumber& x );
|
|
|
|
/*!
|
|
* Returns the tangent of x. Note that x must be in radians.
|
|
*/
|
|
static HNumber tan( const HNumber& x );
|
|
|
|
/*!
|
|
* Returns the arc sine of x.
|
|
*/
|
|
static HNumber asin( const HNumber& x );
|
|
|
|
/*!
|
|
* Returns the arc cosine of x.
|
|
*/
|
|
static HNumber acos( const HNumber& x );
|
|
|
|
/*!
|
|
* Returns the arc tangent of x.
|
|
*/
|
|
static HNumber atan( const HNumber& x );
|
|
|
|
/*!
|
|
* Returns the hyperbolic sine of x. Note that x must be in radians.
|
|
*/
|
|
static HNumber sinh( const HNumber& x );
|
|
|
|
/*!
|
|
* Returns the arc hyperbolic sine of x. The result is in radians.
|
|
*/
|
|
static HNumber asinh( const HNumber & x );
|
|
|
|
/*!
|
|
* Returns the hyperbolic cosine of x. Note that x must be in radians.
|
|
*/
|
|
static HNumber cosh( const HNumber& x );
|
|
|
|
/*!
|
|
* Returns the arc hyperbolic cosine of x. The result is in radians.
|
|
*/
|
|
static HNumber acosh( const HNumber & x );
|
|
|
|
/*!
|
|
* Returns the hyperbolic tangent of x. Note that x must be in radians.
|
|
*/
|
|
static HNumber tanh( const HNumber& x );
|
|
|
|
/*!
|
|
* Returns the arc hyperbolic tangent of x. The result is in radians.
|
|
*/
|
|
static HNumber atanh( const HNumber & x );
|
|
|
|
/*!
|
|
* Releases all resources. After calling this function, you can not use
|
|
* any other functions as well as class HNumber.
|
|
*/
|
|
static void finalize();
|
|
|
|
};
|
|
|
|
std::ostream& operator<<( std::ostream& s, HNumber );
|
|
|
|
#endif // HMATH_H
|