The Math class
in the .NET framework Base Class Libraries implements a large number of
elementary functions. Unfortunately, this list is far from complete.
The Elementary
class in the Extreme.Mathematics
namespace defines many elementary functions that are missing from
Math class.
Some functions exist in the .NET Framework, but there implementation
is far from optimal. We've implemented them in a more efficient way that
in some cases is up to 50x faster.
Utility functions
Method | Description |
---|
IsNaN | Checks if a value is Not-a-Number. |
IsFinite | Checks if a value represents a finite real number. |
IsFinite | Checks if a value represents positive or negative infinity. |
Clip | Restricts a value to the specified interval. |
Step | Returns the Heaviside step function. |
Calculating a trigonometric function for an argument close to a multiple of π/2 is often problematic.
Fortunately, in the actual expressions, the argument is often expressed as a multiple of π. In these cases,
it is possible to compute the exact values of the sine, cosine, and tangent. The following methods implement this
functionality:
Method | Description |
---|
CosPi | Accurately computes the cosine of a value times π. |
SinPi | Accurately computes the sine of a value times π. |
TanPi | Accurately computes the tangent of a value times π. |
Sinc | Returns the unnormalized Sinc function. |
A related problem is that the standard methods quickly become less accurate for larger arguments.
To make the calculation of a trigonometric function fast and accurate, the argument must be reduced
to a relatively small interval around zero. This is done by subtracting an integer multiple of π
from the argument. The standard implementation uses a value of π with only 66 bits of precision.
Some precision is lost for arguments as small as 30,000.
Worse still, for arguments greater than or equal to 2^63, the argument is returned unchanged.
Aside from the fact that this result is completely meaningless, it can cause problems in code that relies
on the fact that the sine and cosine are bounded by -1 and +1.
The trigonometric methods
Sin,
Cos, and
Tan
perform complete argument reduction, and return accurate results even for very large arguments.
More trigonometric functions
Method | Description |
---|
CosPi | Accurately computes the cosine of a value. |
SinPi | Accurately computes the sine of a value. |
TanPi | Accurately computes the tangent of a value. |
Method | Description |
---|
Cosh | Hyperbolic cosine. |
Coth | Hyperbolic cotangent. |
Csch | Hyperbolic co-secant. |
Sinh | Hyperbolic sine. |
Sech | Hyperbolic secant. |
Tanh | Hyperbolic tangent. |
Inverse Hyperbolic Functions
Method | Description |
---|
Acosh | Inverse hyperbolic cosine. |
Acoth | Inverse hyperbolic cotangent. |
Acsch | Inverse hyperbolic co-secant. |
Asech | Inverse hyperbolic secant. |
Asinh | Inverse hyperbolic sine. |
Atanh | Inverse hyperbolic tangent. |
Exponential, Logarithmic and Miscellaneous Functions
The functions in this section calculate expressions with a higher accuracy than
using the standard expression would produce.
Exponential, logarithmic, and miscellaneous functions
Method | Description |
---|
ExpMinus1 |
The exponential function minus one, ex-1,
calculated to high precision when x
is near zero.
|
Hypot | The hypotenuse of a right-angled triangle with specified sides. |
LambertW |
Lambert's W function, the (real) solution W of
x = WeW.
|
Log1PlusX |
The natural logarithm of 1+x calculated to high precision
for x close to zero.
|
Pow | A number raised to an integer power. |
Sqrt1pxm1 | The difference between the square root of a number close to 1 and 1. |
The Pow method is useful only for larger values of the exponent.
For small values, the JIT compiler automatically converts the expression to an optimized multiplication.
Elementary Functions of Decimal Values
The Decimal type is a decimal
floating-point type with up to 28 digits of precision. Transcendental functions like
sine, cosine, exponential and logarithm are not available in the
Math class.
The
DecimalMath
class implements all the methods that are defined for
Double for the decimal
type to full precision. Because the implementation is mostly in software,
the evaluation of these functions takes significantly longer than
the built-in functions for double-precision numbers.
Elementary functions of decimal values
Method | Description |
---|
Acos | Inverse cosine. |
Asin | Inverse sine. |
Atan | Inverse tangent. |
Atan2 | Inverse tangent with two arguments. |
Cos | Cosine. |
Cosh | Hyperbolic cosine. |
Exp | Exponential function. |
Log | Natural logarithm. |
Log | Logarithm with specified base. |
Log10 | Base 10 logarithm. |
Sin | Sine. |
Sinh | Hyperbolic sine. |
Sqrt | Square root. |
Tan | Tangent. |
Tanh | Hyperbolic tangent. |