| /** |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef _DECAF_LANG_MATH_H_ |
| #define _DECAF_LANG_MATH_H_ |
| |
| #include <decaf/util/Config.h> |
| |
| // On some systems there is a min and max macro defined. |
| #undef min |
| #undef max |
| |
| namespace decaf{ |
| namespace lang{ |
| |
| /** |
| * The class <code>Math</code> contains methods for performing basic |
| * numeric operations such as the elementary exponential, logarithm, |
| * square root, and trigonometric functions. |
| */ |
| class DECAF_API Math { |
| public: |
| |
| static const double E; |
| static const double PI; |
| |
| public: |
| |
| Math() {} |
| virtual ~Math() {} |
| |
| public: |
| |
| /** |
| * Returns the absolute value of an int value. If the argument is not |
| * negative, the argument is returned. If the argument is negative, the |
| * negation of the argument is returned. |
| * @param value - the value to return the abs of |
| * @returns the value if positive, otherwise the negative of value |
| */ |
| static int abs( int value ) { |
| return value < 0 ? -value : value; |
| } |
| |
| /** |
| * Returns the absolute value of an long long value. If the argument is not |
| * negative, the argument is returned. If the argument is negative, the |
| * negation of the argument is returned. |
| * @param value - the value to return the abs of |
| * @returns the value if positive, otherwise the negative of value |
| */ |
| static long long abs( long long value ) { |
| return value < 0 ? -value : value; |
| } |
| |
| /** |
| * Returns the absolute value of a float value. If the argument is not |
| * negative, the argument is returned. If the argument is negative, |
| * the negation of the argument is returned. Special cases: |
| * |
| * o If the argument is positive zero or negative zero, the result is |
| * positive zero. |
| * o If the argument is infinite, the result is positive infinity. |
| * o If the argument is NaN, the result is NaN. |
| * |
| * In other words, the result is the same as the value of the expression: |
| * Float::intBitsToFloat( 0x7fffffff & Float::floatToIntBits( value ) ) |
| * |
| * @param value - the value to return the abs of |
| * @returns the value if positive, otherwise the negative of value |
| */ |
| static float abs( float value ); |
| |
| /** |
| * Returns the absolute value of a double value. If the argument is not |
| * negative, the argument is returned. If the argument is negative, |
| * the negation of the argument is returned. Special cases: |
| * |
| * o If the argument is positive zero or negative zero, the result is |
| * positive zero. |
| * o If the argument is infinite, the result is positive infinity. |
| * o If the argument is NaN, the result is NaN. |
| * |
| * In other words, the result is the same as the value of the expression: |
| * Double::longBitsToDouble( 0x7fffffffffffffffULL & |
| * Double::doubleToLongBits( value ) ) |
| * |
| * @param value - the value to return the abs of |
| * @returns the value if positive, otherwise the negative of value |
| */ |
| static double abs( double value ); |
| |
| /** |
| * Returns the arc cosine of an angle, in the range of 0.0 through pi. |
| * Special case: |
| * |
| * o If the argument is NaN or its absolute value is greater than 1, then |
| * the result is NaN. |
| * |
| * @param value - the value to return the arc cosine of. |
| * @returns arc cosine of value in radians. |
| */ |
| //static double acos( double value ); |
| |
| /** |
| * Returns the arc sine of an angle, in the range of -pi/2 through pi/2. |
| * Special cases: |
| * |
| * o If the argument is NaN or its absolute value is greater than 1, then |
| * the result is NaN. |
| * o If the argument is zero, then the result is a zero with the same sign |
| * as the argument. |
| * |
| * @param value - the value to return the arc cosine of. |
| * @returns arc cosine of value in radians. |
| */ |
| //static double asin( double value ); |
| |
| /** |
| * Returns the arc tangent of an angle, in the range of -pi/2 through pi/2. |
| * Special cases: |
| * |
| * o If the argument is NaN, then the result is NaN. |
| * o If the argument is zero, then the result is a zero with the same sign |
| * as the argument. |
| * |
| * @param value - the value to return the arc cosine of. |
| * @returns arc tangent of value in radians. |
| */ |
| //static double atan( double value ); |
| |
| /** |
| * Converts rectangular coordinates (x, y) to polar (r, theta). This method |
| * computes the phase theta by computing an arc tangent of y/x in the range |
| * of -pi to pi. Special cases: |
| * |
| * o If either argument is NaN, then the result is NaN. |
| * o If the first argument is positive zero and the second argument is |
| * positive, or the first argument is positive and finite and the second |
| * argument is positive infinity, then the result is positive zero. |
| * o If the first argument is negative zero and the second argument is |
| * positive, or the first argument is negative and finite and the second |
| * argument is positive infinity, then the result is negative zero. |
| * o If the first argument is positive zero and the second argument is |
| * negative, or the first argument is positive and finite and the second |
| * argument is negative infinity, then the result is the double value |
| * closest to pi. |
| * o If the first argument is negative zero and the second argument is |
| * negative, or the first argument is negative and finite and the second |
| * argument is negative infinity, then the result is the double value |
| * closest to -pi. |
| * o If the first argument is positive and the second argument is positive |
| * zero or negative zero, or the first argument is positive infinity and |
| * the second argument is finite, then the result is the double value |
| * closest to pi/2. |
| * o If the first argument is negative and the second argument is positive |
| * zero or negative zero, or the first argument is negative infinity and |
| * the second argument is finite, then the result is the double value |
| * closest to -pi/2. |
| * o If both arguments are positive infinity, then the result is the double |
| * value closest to pi/4. |
| * o If the first argument is positive infinity and the second argument is |
| * negative infinity, then the result is the double value closest to 3*pi/4. |
| * o If the first argument is negative infinity and the second argument is |
| * positive infinity, then the result is the double value closest to -pi/4. |
| * o If both arguments are negative infinity, then the result is the double |
| * value closest to -3*pi/4. |
| * |
| * @param y - the ordinate coordinate |
| * @param x - the abscissa coordinate |
| * @returns the theta component of the point (r, theta) in polar coordinates |
| * that corresponds to the point (x, y) in Cartesian coordinates. |
| */ |
| //static double atan2( double x, double y ); |
| |
| /** |
| * Returns the cube root of a double value. For positive finite x, |
| * cbrt(-x) == -cbrt(x); that is, the cube root of a negative value is the |
| * negative of the cube root of that value's magnitude. Special cases: |
| * |
| * o If the argument is NaN, then the result is NaN. |
| * o If the argument is infinite, then the result is an infinity with the |
| * same sign as the argument. |
| * o If the argument is zero, then the result is a zero with the same sign |
| * as the argument. |
| * |
| * @param value - the double to compute the cube root of |
| * @returns the cube root of value |
| */ |
| //static double cbrt( double value ); |
| |
| /** |
| * Returns the trigonometric cosine of an angle. Special cases: |
| * |
| * o If the argument is NaN or an infinity, then the result is NaN. |
| * |
| * @param value - an value in radians |
| * @returns the cosine of the argument. |
| */ |
| //static double cos( double value ); |
| |
| /** |
| * Returns the hyperbolic cosine of a double value. The hyperbolic cosine |
| * of x is defined to be (ex + e-x)/2 where e is Euler's number. |
| * Special cases: |
| * |
| * o If the argument is NaN, then the result is NaN. |
| * o If the argument is infinite, then the result is positive infinity. |
| * o If the argument is zero, then the result is 1.0. |
| * |
| * @param value - the number whose hyperbolic cosine is to be found |
| * @return the hyperbolic cosine of value |
| */ |
| //static double cosh( double value ); |
| |
| /** |
| * Returns the trigonometric sine of an angle. Special case: |
| * |
| * o If the argument is NaN or an infinity, then the result is NaN. |
| * o If the argument is zero, then the result is a zero with the same sign |
| * as the argument. |
| * |
| * @param value - the number whose sin is to be found |
| * @return the sine of value |
| */ |
| //static double sin( double value ); |
| |
| /** |
| * Returns the hyperbolic sine of a double value. The hyperbolic sine of x |
| * is defined to be (ex - e-x)/2 where e is Euler's number. |
| * Special cases: |
| * |
| * o If the argument is NaN, then the result is NaN. |
| * o If the argument is infinite, then the result is an infinity with |
| * the same sign as the argument. |
| * o If the argument is zero, then the result is a zero with the same |
| * sign as the argument. |
| * |
| * @param value - the number whose hyperbolic sin is to be found |
| * @return the hyperbolic sine of value |
| */ |
| //static double sinh( double value ); |
| |
| /** |
| * Returns the trigonometric tangent of an angle. Special cases: |
| * |
| * o If the argument is NaN or an infinity, then the result is NaN. |
| * o If the argument is zero, then the result is a zero with the same |
| * sign as the argument. |
| * |
| * @param value - the number whose tangent is to be found |
| * @return the tangent of value |
| */ |
| //static double tan( double value ); |
| |
| /** |
| * Returns the hyperbolic tangent of a double value. The hyperbolic |
| * tangent of x is defined to be (ex - e-x)/(ex + e-x), in other words, |
| * sinh(x)/cosh(x). Note that the absolute value of the exact tanh is |
| * always less than 1. Special cases: |
| * |
| * o If the argument is NaN, then the result is NaN. |
| * o If the argument is zero, then the result is a zero with the same |
| * sign as the argument. |
| * o If the argument is positive infinity, then the result is +1.0. |
| * o If the argument is negative infinity, then the result is -1.0. |
| * |
| * @param value - the number whose hyperbolic tangent is to be found |
| * @return the hyperbolic cosine of value |
| */ |
| //static double tanh( double value ); |
| |
| /** |
| * Returns the correctly rounded positive square root of a double value. |
| * Special cases: |
| * |
| * o If the argument is NaN or less than zero, then the result is NaN. |
| * o If the argument is positive infinity, then the result is positive infinity. |
| * o If the argument is positive zero or negative zero, then the result is |
| * the same as the argument. |
| * |
| * Otherwise, the result is the double value closest to the true mathematical |
| * square root of the argument value. |
| * @param value - the value to find the square root of |
| * @param the square root of the argument. |
| */ |
| static double sqrt( double value ); |
| |
| /** |
| * Returns the value of the first argument raised to the power of the second |
| * argument. Special cases: |
| * |
| * o If the second argument is positive or negative zero, then the result |
| * is 1.0. |
| * o If the second argument is 1.0, then the result is the same as the first |
| * argument. |
| * o If the second argument is NaN, then the result is NaN. |
| * o If the first argument is NaN and the second argument is nonzero, |
| * then the result is NaN. |
| * |
| * @param base - the base |
| * @param exp - the exponent |
| * @return the base raised to the power of exp. |
| */ |
| static double pow( double base, double exp ); |
| |
| /** |
| * Returns the double value that is closest in value to the argument and |
| * is equal to a mathematical integer. If two double values that are |
| * mathematical integers are equally close, the result is the integer |
| * value that is even. Special cases: |
| * |
| * o If the argument value is already equal to a mathematical integer, |
| * then the result is the same as the argument. |
| * o If the argument is NaN or an infinity or positive zero or negative |
| * zero, then the result is the same as the argument. |
| * |
| * @param value - the value to round to the nearest integer |
| * @returns the rounded value |
| */ |
| //static double rint( double value ); |
| |
| /** |
| * Returns the smaller of two <code>short</code> values. That is, |
| * the result the argument closer to the value of |
| * <code>Short::MIN_VALUE</code>. If the arguments have the same |
| * value, the result is that same value. |
| * @param a - an argument. |
| * @param b - another argument. |
| * @return the smaller of <code>a</code> and <code>b</code>. |
| */ |
| static short min( short a, short b ) { |
| return ( a <= b ? a : b ); |
| } |
| |
| /** |
| * Returns the smaller of two <code>int</code> values. That is, |
| * the result the argument closer to the value of |
| * <code>Integer::MIN_VALUE</code>. If the arguments have the same |
| * value, the result is that same value. |
| * @param a - an argument. |
| * @param b - another argument. |
| * @return the smaller of <code>a</code> and <code>b</code>. |
| */ |
| static int min( int a, int b ) { |
| return ( a <= b ? a : b ); |
| } |
| |
| /** |
| * Returns the smaller of two <code>unsigned int</code> values. That is, |
| * the result the argument closer to the value of |
| * <code>Integer::MIN_VALUE</code>. If the arguments have the same |
| * value, the result is that same value. |
| * @param a - an argument. |
| * @param b - another argument. |
| * @return the smaller of <code>a</code> and <code>b</code>. |
| */ |
| static int min( unsigned int a, unsigned int b ) { |
| return ( a <= b ? a : b ); |
| } |
| |
| /** |
| * Returns the smaller of two <code>long long</code> values. That is, |
| * the result the argument closer to the value of |
| * <code>Long::MIN_VALUE</code>. If the arguments have the same |
| * value, the result is that same value. |
| * @param a - an argument. |
| * @param b - another argument. |
| * @return the smaller of <code>a</code> and <code>b</code>. |
| */ |
| static long long min( long long a, long long b ) { |
| return ( a <= b ? a : b ); |
| } |
| |
| /** |
| * Returns the smaller of two float values. That is, the result is the |
| * value closer to negative infinity. If the arguments have the same value, |
| * the result is that same value. If either value is NaN, then the result |
| * is NaN. Unlike the numerical comparison operators, this method considers |
| * negative zero to be strictly smaller than positive zero. If one argument |
| * is positive zero and the other is negative zero, the result is negative |
| * zero. |
| * @param a - an argument. |
| * @param b - another argument. |
| * @return the smaller of <code>a</code> and <code>b</code>. |
| */ |
| static float min( float a, float b ); |
| |
| /** |
| * Returns the smaller of two double values. That is, the result is the |
| * value closer to negative infinity. If the arguments have the same value, |
| * the result is that same value. If either value is NaN, then the result |
| * is NaN. Unlike the numerical comparison operators, this method considers |
| * negative zero to be strictly smaller than positive zero. If one argument |
| * is positive zero and the other is negative zero, the result is negative |
| * zero. |
| * @param a - an argument. |
| * @param b - another argument. |
| * @return the smaller of <code>a</code> and <code>b</code>. |
| */ |
| static double min( double a, double b ); |
| |
| /** |
| * Returns the larger of two <code>short</code> values. That is, |
| * the result the argument closer to the value of |
| * <code>Short::MAX_VALUE</code>. If the arguments have the same |
| * value, the result is that same value. |
| * @param a - an argument. |
| * @param b - another argument. |
| * @return the larger of <code>a</code> and <code>b</code>. |
| */ |
| static short max( short a, short b ) { |
| return ( a >= b ? a : b ); |
| } |
| |
| /** |
| * Returns the larger of two <code>int</code> values. That is, |
| * the result the argument closer to the value of |
| * <code>Integer::MAX_VALUE</code>. If the arguments have the same |
| * value, the result is that same value. |
| * @param a - an argument. |
| * @param b - another argument. |
| * @return the larger of <code>a</code> and <code>b</code>. |
| */ |
| static int max( int a, int b ) { |
| return ( a >= b ? a : b ); |
| } |
| |
| /** |
| * Returns the larger of two <code>long long</code> values. That is, |
| * the result the argument closer to the value of |
| * <code>Long::MAX_VALUE</code>. If the arguments have the same |
| * value, the result is that same value. |
| * @param a - an argument. |
| * @param b - another argument. |
| * @return the larger of <code>a</code> and <code>b</code>. |
| */ |
| static long long max( long long a, long long b ) { |
| return ( a >= b ? a : b ); |
| } |
| |
| /** |
| * Returns the greater of two float values. That is, the result is the |
| * argument closer to positive infinity. If the arguments have the same |
| * value, the result is that same value. If either value is NaN, then the |
| * result is NaN. Unlike the numerical comparison operators, this method |
| * considers negative zero to be strictly smaller than positive zero. If |
| * one argument is positive zero and the other negative zero, the result |
| * is positive zero. |
| * @param a - an argument. |
| * @param b - another argument. |
| * @return the larger of <code>a</code> and <code>b</code>. |
| */ |
| static float max( float a, float b ); |
| |
| /** |
| * Returns the greater of two double values. That is, the result is the |
| * argument closer to positive infinity. If the arguments have the same value, |
| * the result is that same value. If either value is NaN, then the result is |
| * NaN. Unlike the numerical comparison operators, this method considers |
| * negative zero to be strictly smaller than positive zero. If one argument |
| * is positive zero and the other negative zero, the result is positive zero. |
| * @param a - an argument. |
| * @param b - another argument. |
| * @return the larger of <code>a</code> and <code>b</code>. |
| */ |
| static double max( double a, double b ); |
| |
| /** |
| * Returns the natural logarithm (base e) of a double value. Special cases: |
| * |
| * o If the argument is NaN or less than zero, then the result is NaN. |
| * o If the argument is positive infinity, then the result is |
| * positive infinity. |
| * o If the argument is positive zero or negative zero, then the result |
| * is negative infinity. |
| * |
| * @param value the value to compute the natural log of. |
| * @returns the natural log of value. |
| */ |
| //static double log( double value ); |
| |
| /** |
| * Returns the base 10 logarithm of a double value. Special cases: |
| * |
| * o If the argument is NaN or less than zero, then the result is NaN. |
| * o If the argument is positive infinity, then the result is positive |
| * infinity. |
| * o If the argument is positive zero or negative zero, then the result is |
| * negative infinity. |
| * o If the argument is equal to 10n for integer n, then the result is n. |
| * |
| * @param value - the value to operate on |
| * @returns the long base 10 of value |
| */ |
| //static double log10( double value ); |
| |
| /** |
| * Returns the natural logarithm of the sum of the argument and 1. Note that |
| * for small values x, the result of log1p(x) is much closer to the true |
| * result of ln(1 + x) than the floating-point evaluation of log(1.0+x). |
| * |
| * Special cases: |
| * |
| * o If the argument is NaN or less than -1, then the result is NaN. |
| * o If the argument is positive infinity, then the result is positive |
| * infinity. |
| * o If the argument is negative one, then the result is negative infinity. |
| * o If the argument is zero, then the result is a zero with the same sign |
| * as the argument. |
| * |
| * @param value - the value to operate on |
| * @returns the the value ln(x + 1), the natural log of x + 1 |
| */ |
| //static double log1p( double value ); |
| |
| /** |
| * Returns the smallest (closest to negative infinity) double value that is |
| * greater than or equal to the argument and is equal to a mathematical |
| * integer. Special cases: |
| * |
| * o If the argument value is already equal to a mathematical integer, |
| * then the result is the same as the argument. |
| * o If the argument is NaN or an infinity or positive zero or negative |
| * zero, then the result is the same as the argument. |
| * o If the argument value is less than zero but greater than -1.0, then |
| * the result is negative zero. |
| * |
| * Note that the value of Math.ceil(x) is exactly the value of -Math.floor(-x). |
| * @param value - the value to find the ceiling of |
| * @returns the smallest (closest to negative infinity) floating-point value |
| * that is greater than or equal to the argument and is equal to a |
| * mathematical integer. |
| */ |
| static double ceil( double value ); |
| |
| /** |
| * Returns the largest (closest to positive infinity) double value that is |
| * less than or equal to the argument and is equal to a mathematical integer. |
| * Special cases: |
| * |
| * o If the argument value is already equal to a mathematical integer, |
| * then the result is the same as the argument. |
| * o If the argument is NaN or an infinity or positive zero or negative |
| * zero, then the result is the same as the argument. |
| * |
| * @param value - the value to find the floor of |
| * @returns the largest (closest to positive infinity) floating-point value |
| * that less than or equal to the argument and is equal to a mathematical |
| * integer. |
| */ |
| static double floor( double value ); |
| |
| /** |
| * Returns the closest int to the argument. The result is rounded to an |
| * integer by adding 1/2, taking the floor of the result, and casting the |
| * result to type int. In other words, the result is equal to the value |
| * of the expression: (int)Math.floor( a + 0.5f ) |
| * |
| * o If the argument is NaN, the result is 0. |
| * o If the argument is negative infinity or any value less than or equal |
| * to the value of Integer::MIN_VALUE, the result is equal to the value of |
| * Integer::MIN_VALUE. |
| * o If the argument is positive infinity or any value greater than or equal |
| * to the value of Integer::MAX_VALUE, the result is equal to the value of |
| * Integer::MAX_VALUE. |
| * |
| * @param value - the value to round |
| * @returns the value of the argument rounded to the nearest integral value. |
| */ |
| static int round( float value ); |
| |
| /** |
| * Returns the closest long long to the argument. The result is rounded to |
| * an integer by adding 1/2, taking the floor of the result, and casting the |
| * result to type long long. In other words, the result is equal to the value |
| * of the expression: (long long)Math.floor(a + 0.5d) |
| * |
| * o If the argument is NaN, the result is 0. |
| * o If the argument is negative infinity or any value less than or equal |
| * to the value of Long::MIN_VALUE, the result is equal to the value of |
| * Long::MIN_VALUE. |
| * o If the argument is positive infinity or any value greater than or equal |
| * to the value of Long::MAX_VALUE, the result is equal to the value of |
| * Long::MAX_VALUE. |
| * |
| * @param value - the value to round |
| * @returns the value of the argument rounded to the nearest integral value. |
| */ |
| static long long round( double value ); |
| |
| /** |
| * Computes the remainder operation on two arguments as prescribed by the |
| * IEEE 754 standard. The remainder value is mathematically equal to |
| * f1 - f2 × n, where n is the mathematical integer closest to the exact |
| * mathematical value of the quotient f1/f2, and if two mathematical |
| * integers are equally close to f1/f2, then n is the integer that is even. |
| * If the remainder is zero, its sign is the same as the sign of the first |
| * argument. Special cases: |
| * |
| * o If either argument is NaN, or the first argument is infinite, or the |
| * second argument is positive zero or negative zero, then the result is |
| * NaN. |
| * o If the first argument is finite and the second argument is infinite, |
| * then the result is the same as the first argument. |
| * |
| * @param f1 - the dividend. |
| * @param f2 - the divisor |
| * @return the IEEE remainder of value |
| */ |
| //static double IEEEremainder( double f1, double f2 ); |
| |
| /** |
| * Returns a double value with a positive sign, greater than or equal to 0.0 |
| * and less than 1.0. Returned values are chosen pseudorandomly with |
| * (approximately) uniform distribution from that range. |
| * |
| * When this method is first called, it creates a single new pseudorandom-number |
| * generator; This new pseudorandom-number generator is used thereafter for all |
| * calls to this method and is used nowhere else. |
| * |
| * This method is properly synchronized to allow correct use by more than |
| * one thread. However, if many threads need to generate pseudorandom numbers |
| * at a great rate, it may reduce contention for each thread to have its |
| * own pseudorandom-number generator. |
| * @returns a pseudorandom double greater than or equal to 0.0 and |
| * less than 1.0. |
| */ |
| static double random(); |
| |
| /** |
| * Returns Euler's number e raised to the power of a double value. |
| * Special cases: |
| * |
| * o If the argument is NaN, the result is NaN. |
| * o If the argument is positive infinity, then the result is positive infinity. |
| * o If the argument is negative infinity, then the result is positive zero. |
| * |
| * @param value - the exponent to raise e to |
| * @returns the value e^a, where e is the base of the natural logarithms. |
| */ |
| //static double exp( double value ); |
| |
| /** |
| * Returns e^x - 1. Note that for values of x near 0, the exact sum of |
| * expm1(x) + 1 is much closer to the true result of ex than exp(x). |
| * Special cases: |
| * |
| * o If the argument is NaN, the result is NaN. |
| * o If the argument is positive infinity, then the result is positive infinity. |
| * o If the argument is negative infinity, then the result is -1.0. |
| * o If the argument is zero, then the result is a zero with the same sign as |
| * the argument. |
| * |
| * @param the value to raise e^x - 1 |
| * @returns the value ex - 1. |
| */ |
| //static double expm1( double value ); |
| |
| /** |
| * Returns sqrt(x^2 + y^2) without intermediate overflow or underflow. |
| * Special cases: |
| * |
| * If either argument is infinite, then the result is positive infinity. |
| * If either argument is NaN and neither argument is infinite, then the |
| * result is NaN. |
| * |
| * @param x - an argument |
| * @param y - another argument |
| * @returns the sqrt(x^2 + y^2) without intermediate overflow or underflow |
| */ |
| //static double hypot( double x, double y ); |
| |
| /** |
| * Returns the signum function of the argument; zero if the argument is zero, |
| * 1.0f if the argument is greater than zero, -1.0f if the argument is less |
| * than zero. Special Cases: |
| * |
| * o If the argument is NaN, then the result is NaN. |
| * o If the argument is positive zero or negative zero, then the result is |
| * the same as the argument. |
| * |
| * @param value - the floating-point value whose signum is to be returned |
| * @returns the signum function of the argument |
| */ |
| static float signum( float value ); |
| |
| /** |
| * Returns the signum function of the argument; zero if the argument is zero, |
| * 1.0f if the argument is greater than zero, -1.0f if the argument is less |
| * than zero. Special Cases: |
| * |
| * o If the argument is NaN, then the result is NaN. |
| * o If the argument is positive zero or negative zero, then the result is |
| * the same as the argument. |
| * |
| * @param value - the floating-point value whose signum is to be returned |
| * @returns the signum function of the argument |
| */ |
| static double signum( double value ); |
| |
| /** |
| * Returns the measure in radians of the supplied degree angle |
| * @param angdeg - an angle in degrees |
| * @return the radian measure of the angle. |
| */ |
| static double toRadians( double angdeg ) { |
| return angdeg / 180 * PI; |
| } |
| |
| /** |
| * Returns the measure in degrees of the supplied radian angle |
| * @param angrad - an angle in radians |
| * @return the degree measure of the angle. |
| */ |
| static double toDegrees( double angrad ) { |
| return angrad * 180 / PI; |
| } |
| |
| /** |
| * Returns the size of an ulp of the argument. An ulp of a float value is |
| * the positive distance between this floating-point value and the float |
| * value next larger in magnitude. Note that for non-NaN x, ulp(-x) == ulp(x). |
| * Special Cases: |
| * |
| * o If the argument is NaN, then the result is NaN. |
| * o If the argument is positive or negative infinity, then the result is |
| * positive infinity. |
| * o If the argument is positive or negative zero, then the result is |
| * Float::MIN_VALUE. |
| * o If the argument is ±Float::MAX_VALUE, then the result is equal to 2^104. |
| * |
| * @param value - the floating-point value whose ulp is to be returned |
| * @returns the size of an ulp of the argument |
| */ |
| //static float ulp( float value ); |
| |
| /** |
| * Returns the size of an ulp of the argument. An ulp of a double value is |
| * the positive distance between this floating-point value and the double |
| * value next larger in magnitude. Note that for non-NaN x, ulp(-x) == ulp(x). |
| * Special Cases: |
| * |
| * o If the argument is NaN, then the result is NaN. |
| * o If the argument is positive or negative infinity, then the result is |
| * positive infinity. |
| * o If the argument is positive or negative zero, then the result is |
| * Double::MIN_VALUE. |
| * o If the argument is ±Float::MAX_VALUE, then the result is equal to 2^971. |
| * |
| * @param value - the floating-point value whose ulp is to be returned |
| * @returns the size of an ulp of the argument |
| */ |
| //static double ulp( double value ); |
| |
| }; |
| |
| }} |
| |
| #endif /*_DECAF_LANG_MATH_H_*/ |