/* $DOC$
   $AUTHOR$
      Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
   $TEMPLATE$
      Function
   $NAME$
      Abs()
   $CATEGORY$
      API
   $SUBCATEGORY$
      Math
   $ONELINER$
      Return the absolute value of a number.
   $SYNTAX$
      Abs( <nNumber> ) --> nAbsNumber
   $ARGUMENTS$
      <nNumber> Any number.
   $RETURNS$
      <nAbsNumber> The absolute numeric value.
   $DESCRIPTION$
      This function yields the absolute value of the numeric value or
      expression <nNumber>.
   $EXAMPLES$
      LOCAL nNumber := 50
      LOCAL nNumber1 := 27

      ? nNumber - nNumber1
      ? nNumber1 - nNumber
      ? Abs( nNumber - nNumber1 )
      ? Abs( nNumber1 - nNumber )
      ? Abs( -1 * 345 )
   $STATUS$
      R
   $COMPLIANCE$
      C
   $PLATFORMS$
      All
   $FILES$
      Library is core
   $SEEALSO$

   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
   $TEMPLATE$
      Function
   $NAME$
      Exp()
   $CATEGORY$
      API
   $SUBCATEGORY$
      Math
   $ONELINER$
      Calculates the value of e raised to the passed power.
   $SYNTAX$
      Exp( <nNumber> ) --> nValue
   $ARGUMENTS$
      <nNumber> Any  real number.
   $RETURNS$
      <nValue>  The anti-logarithm of <nNumber>
   $DESCRIPTION$
      This function returns the value of e raised to the power of
      <nNumber>. It is the inverse of Log().
   $EXAMPLES$
      ? Exp( 45 )
   $STATUS$
      R
   $COMPLIANCE$
      C
   $PLATFORMS$
      All
   $FILES$
      Library is core
   $SEEALSO$
      Log()
   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
   $TEMPLATE$
      Function
   $NAME$
      Int()
   $CATEGORY$
      API
   $SUBCATEGORY$
      Math
   $ONELINER$
      Return the integer port of a numeric value.
   $SYNTAX$
      Int( <nNumber> ) --> nIntNumber
   $ARGUMENTS$
      <nNumber> Any  numeric value.
   $RETURNS$
      <nIntNumber> The integer portion of the numeric value.
   $DESCRIPTION$
      This function converts a numeric expression to an integer. All
      decimal digits are truncated. This function does not round a value
      upward or downward; it merely truncates a number at the decimal
      point.
   $EXAMPLES$
      Set( _SET_DECIMALS, 5 )
      ? Int( 632512.62541 )
      ? Int( 845414111.91440 )
   $STATUS$
      R
   $COMPLIANCE$
      C
   $PLATFORMS$
      All
   $FILES$
      Library is core
   $SEEALSO$
      Round(), StrZero()
   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
   $TEMPLATE$
      Function
   $NAME$
      Log()
   $CATEGORY$
      API
   $SUBCATEGORY$
      Math
   $ONELINER$
      Returns the natural logarithm of a number.
   $SYNTAX$
      Log( <nNumber> ) --> nLog
   $ARGUMENTS$
      <nNumber> Any numeric expression.
   $RETURNS$
      <nExponent> The natural logarithm of <nNumber>.
   $DESCRIPTION$
      This function returns the natural logarithm of the number <nNumber>.
      If <nNumber> is 0 or less than 0, a numeric overflow occurs,
      which is depicted on the display device as a series of asterisks.
      This function is the inverse of Exp().
   $EXAMPLES$
      ? Log( 632512 )
   $STATUS$
      R
   $COMPLIANCE$
      C
   $PLATFORMS$
      All
   $FILES$
      Library is core
   $SEEALSO$
      Exp()
   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
   $TEMPLATE$
      Function
   $NAME$
      Max()
   $CATEGORY$
      API
   $SUBCATEGORY$
      Math
   $ONELINER$
      Returns the maximum of two numbers or dates.
   $SYNTAX$
      Max( <xValue>, <xValue1> ) --> xMax
   $ARGUMENTS$
      <xValue>  Any date or numeric value.

      <xValue1> Any date or numeric value (same type as <xValue>).
   $RETURNS$
      <xMax> The larger numeric (or later date) value.
   $DESCRIPTION$
      This function returns the larger of the two passed expressions. If
      <xValue> and <xValue1> are numeric data types, the value returned by
      this function will be a numeric data type as well and will be the
      larger of the two numbers passed to it. If <xValue> and <xValue1>
      are date data types, the return value will be a date data type as
      well. It will be the later of the two dates passed to it.
   $EXAMPLES$
      ? Max( 214514214, 6251242142 )
      ? Max( 0d20001111, 0d20140621 )
   $STATUS$
      R
   $COMPLIANCE$
      C
   $PLATFORMS$
      All
   $FILES$
      Library is core
   $SEEALSO$
      Min()
   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
   $TEMPLATE$
      Function
   $NAME$
      Min()
   $CATEGORY$
      API
   $SUBCATEGORY$
      Math
   $ONELINER$
      Determines the minimum of two numbers or dates.
   $SYNTAX$
      Min( <xValue>, <xValue1> ) --> xMin
   $ARGUMENTS$
      <xValue>  Any date or numeric value.

      <xValue1> Any date or numeric value.
   $RETURNS$
      <xMin>  The smaller numeric (or earlier date) value.
   $DESCRIPTION$
      This function returns the smaller of the two passed expressions.
      <xValue> and <xValue1> must be the same data type. If numeric, the
      smaller number is returned. If dates, the earlier date is returned.
   $EXAMPLES$
      ? Min( 214514214, 6251242142 )
      ? Min( 0d20001111, 0d20140621 )
   $STATUS$
      R
   $COMPLIANCE$
      C
   $PLATFORMS$
      All
   $FILES$
      Library is core
   $SEEALSO$
      Max()
   $END$
 */

/* $DOC$
   $TEMPLATE$
      Function
   $NAME$
      Mod()
   $CATEGORY$
      API
   $SUBCATEGORY$
      Math
   $ONELINER$
      Return the modulus of two numbers.
   $SYNTAX$
      Mod( <nNumber>, <nNumber1> ) -->  <nRemainder>
   $ARGUMENTS$
      <nNumber>  Numerator in a divisional expression.

      <nNumber1> Denominator in a divisional expression.
   $RETURNS$
      <nRemainder>  The remainder after the division operation.
   $DESCRIPTION$
      This function returns the remainder of one number divided by
      another.
   $EXAMPLES$
      ? Mod( 12, 8.521 )
      ? Mod( 12, 0 )
      ? Mod( 62412.5142, 4522114.12014 )
   $STATUS$
      R
   $COMPLIANCE$
      C
   $PLATFORMS$
      All
   $FILES$
      Library is core
   $SEEALSO$
      %
   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
   $TEMPLATE$
      Function
   $NAME$
      Sqrt()
   $CATEGORY$
      API
   $SUBCATEGORY$
      Math
   $ONELINER$
      Calculates the square root of a number.
   $SYNTAX$
      Sqrt( <nNumber> ) --> nSqrt
   $ARGUMENTS$
      <nNumber> Any  numeric value.
   $RETURNS$
      <nSqrt>   The square root of <number>.
   $DESCRIPTION$
      This function returns the square root of <nNumber>. The precision
      of this evaluation is based solely on the setting of `_SET_DECIMALS`.
      Any negative number passed as <nNumber> will always return a 0.
   $EXAMPLES$
      Set( _SET_DECIMALS, 5 )
      ? Sqrt( 632512.62541 )
      ? Sqrt( 845414111.91440 )
   $STATUS$
      R
   $COMPLIANCE$
      C
   $PLATFORMS$
      All
   $FILES$
      Library is core
   $SEEALSO$
      Round()
   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
   $TEMPLATE$
      Function
   $NAME$
      Round()
   $CATEGORY$
      API
   $SUBCATEGORY$
      Math
   $ONELINER$
      Rounds off a numeric expression.
   $SYNTAX$
      Round( <nNumber>, <nPlace> ) --> nResult
   $ARGUMENTS$
      <nNumber> Any numeric value.

      <nPlace>  The number of places to round to.
   $RETURNS$
      <nResult> The rounded number.
   $DESCRIPTION$
      This function rounds off the value of <nNumber> to the number of
      decimal places specified by <nPlace>. If the value of <nPlace> is
      a negative number, the function will attempt to round <nNumber> in
      whole numbers. Numbers from 5 through 9 will be rounded up, all
      others will be rounded down.
   $EXAMPLES$
      ? Round( 632512.62541, 5 )
      ? Round( 845414111.91440, 3 )
   $STATUS$
      R
   $COMPLIANCE$
      C
   $PLATFORMS$
      All
   $FILES$
      Library is core
   $SEEALSO$
      Int(), Str(), Val(), SET FIXED
   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2001 IntTec GmbH, Martin Vogel <vogel@inttec.de>
   $TEMPLATE$
      C Function
   $NAME$
      hb_mathGetLastError()
   $CATEGORY$
      C level API
   $SUBCATEGORY$
      Math
   $ONELINER$
      get the last math lib error
   $SYNTAX$
      C Prototype

      #include "hbmath.h"
      hb_mathGetLastError( HB_MATH_EXCEPTION * phb_exc )
                          --> int iMathErrorType
   $ARGUMENTS$
      phb_exc     pointer to HB_MATH_EXCEPTION structure, if not NULL,
                  the structure will be filled with information about the
                  last math error:
      ```c
      typedef struct _HB_MATH_EXCEPTION {
        int type;        // Math error type, is one of the constants
                         // HB_MATH_ERR_xxx defined in hbmath.ch
        char *funcname;  // Pointer to name of the math C RTL routine
                         // that caused the error.
        char *error;     // Pointer to error description.
        double arg1;     // First and
        double arg2;     // Second double argument to the math routine.
        double retval;   // Corrected return value for the math routine.
        int retvalwidth; // Width and
        int retvaldec;   // Decimals of the corrected return value,
                         // both default to -1
        int handled;     // 1, if the math error is already corrected,
                         // 0 otherwise.
      } HB_MATH_EXCEPTION;
      ```
   $RETURNS$
      <iMathErrorType>
   $DESCRIPTION$

   $EXAMPLES$

   $STATUS$
      R
   $COMPLIANCE$
      NA
   $FILES$
      Header file is hbmath.h
      Library is core
   $PLATFORMS$
      All
   $SEEALSO$

   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2001 IntTec GmbH, Martin Vogel <vogel@inttec.de>
   $TEMPLATE$
      C Function
   $NAME$
      hb_mathResetError()
   $CATEGORY$
      C level API
   $SUBCATEGORY$
      Math
   $ONELINER$
      Reset the internal math error information structure
   $SYNTAX$
      C Prototype

      #include "hbmath.h"
      hb_mathResetError( void )
   $ARGUMENTS$

   $DESCRIPTION$

   $EXAMPLES$

   $STATUS$
      R
   $COMPLIANCE$
      NA
   $FILES$
      Header file is hbmath.h
      Library is core
   $PLATFORMS$
      All
   $SEEALSO$

   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2001 IntTec GmbH, Martin Vogel <vogel@inttec.de>
   $TEMPLATE$
      C Function
   $NAME$
      hb_mathIsMathErr()
   $CATEGORY$
      C level API
   $SUBCATEGORY$
      Math
   $ONELINER$
      Check if Harbour math error handling is available
   $SYNTAX$
      C Prototype

      #include "hbmath.h"
      hb_mathIsMathErr( void ) --> int iIsMathHandler
   $ARGUMENTS$

   $RETURNS$
      <iIsMathHandler>
   $DESCRIPTION$

   $EXAMPLES$

   $STATUS$
      R
   $COMPLIANCE$
      NA
   $FILES$
      Header file is hbmath.h
      Library is core
   $PLATFORMS$
      All
   $SEEALSO$

   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2001 IntTec GmbH, Martin Vogel <vogel@inttec.de>
   $TEMPLATE$
      C Function
   $NAME$
      hb_mathSetHandler()
   $CATEGORY$
      C level API
   $SUBCATEGORY$
      Math
   $ONELINER$
      set the Harbour math handler
   $SYNTAX$
      C Prototype

      #include "hbmath.h"
      hb_mathSetHandler( HB_MATH_HANDLERPROC handlerproc )
                        --> HB_MATH_HANDLERPROC previous_handerproc
   $ARGUMENTS$
      handlerproc             custom math handler
              typedef int (* HB_MATH_HANDLERPROC)(HB_MATH_EXCEPTION * err)
   $RETURNS$
      previous_handlerproc    previous math handler
              typedef int (* HB_MATH_HANDLERPROC)(HB_MATH_EXCEPTION * err)
   $DESCRIPTION$

   $EXAMPLES$

   $STATUS$
      R
   $COMPLIANCE$
      NA
   $FILES$
      Header file is hbmath.h
      Library is core
   $PLATFORMS$
      All
   $SEEALSO$

   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2001 IntTec GmbH, Martin Vogel <vogel@inttec.de>
   $TEMPLATE$
      C Function
   $NAME$
      hb_mathGetHandler()
   $CATEGORY$
      C level API
   $SUBCATEGORY$
      Math
   $ONELINER$
      get current Harbour math error handler
   $SYNTAX$
      C Prototype

      #include "hbmath.h"
      hb_mathGetHandler( void ) --> HB_MATH_HANDLERPROC handlerproc
   $ARGUMENTS$
      handlerproc             custom math handler
              typedef int (* HB_MATH_HANDLERPROC)(HB_MATH_EXCEPTION * err)
   $RETURNS$
      <handerproc>
   $DESCRIPTION$

   $EXAMPLES$

   $STATUS$
      R
   $COMPLIANCE$
      NA
   $FILES$
      Header file is hbmath.h
      Library is core
   $PLATFORMS$
      All
   $SEEALSO$

   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2001 IntTec GmbH, Martin Vogel <vogel@inttec.de>
   $TEMPLATE$
      C Function
   $NAME$
      hb_mathSetErrMode()
   $CATEGORY$
      C level API
   $SUBCATEGORY$
      Math
   $ONELINER$
      set math error handling mode
   $SYNTAX$
      C Prototype

      #include "hbmath.h"
      hb_mathSetErrMode( int imode ) --> int ioldmode
   $ARGUMENTS$
      imode        math error handling mode, one of the following
                   constants, defined in hbmath.ch:
      <table-noheader>
      HB_MATH_ERRMODE_DEFAULT
      HB_MATH_ERRMODE_CDEFAULT
      HB_MATH_ERRMODE_USER
      HB_MATH_ERRMODE_USERDEFAULT
      HB_MATH_ERRMODE_USERCDEFAULT
      </table>
   $RETURNS$
      ioldmode     old math error handling mode
   $DESCRIPTION$

   $EXAMPLES$

   $STATUS$
      R
   $COMPLIANCE$
      NA
   $FILES$
      Header file is hbmath.h
      Library is core
   $PLATFORMS$
      All
   $SEEALSO$
      hb_mathGetErrMode()
   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2001 IntTec GmbH, Martin Vogel <vogel@inttec.de>
   $TEMPLATE$
      C Function
   $NAME$
      hb_mathGetErrMode()
   $CATEGORY$
      C level API
   $SUBCATEGORY$
      Math
   $ONELINER$
      get math error handling mode
   $SYNTAX$
      C Prototype

      #include "hbmath.h"
      hb_mathGetErrMode( void ) --> imode
   $ARGUMENTS$

   $RETURNS$
      imode       math error handling mode
   $DESCRIPTION$

   $EXAMPLES$

   $STATUS$
      R
   $COMPLIANCE$
      NA
   $FILES$
      Header file is hbmath.h
      Library is core
   $PLATFORMS$
      All
   $SEEALSO$
      hb_mathSetErrMode()
   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2001 IntTec GmbH, Martin Vogel <vogel@inttec.de>
   $TEMPLATE$
      Function
   $NAME$
      hb_matherMode()
   $CATEGORY$
      API
   $SUBCATEGORY$
      Math
   $ONELINER$
      Set/Get math error handling mode
   $SYNTAX$
      hb_matherMode( [<nNewMode>] ) --> nOldMode
   $ARGUMENTS$
      [<nNumber>]   new math error handling mode, one of the following
                    constants, defined in hbmath.ch:
      <table-noheader>
      HB_MATH_ERRMODE_DEFAULT
      HB_MATH_ERRMODE_CDEFAULT
      HB_MATH_ERRMODE_USER
      HB_MATH_ERRMODE_USERDEFAULT
      HB_MATH_ERRMODE_USERCDEFAULT
      </table>
   $RETURNS$
      <nOldMode>    old math error handling mode
   $DESCRIPTION$

   $EXAMPLES$

   $STATUS$
      R
   $COMPLIANCE$

   $PLATFORMS$
      All
   $FILES$
      Header file is hbmath.ch
      Library is core
   $SEEALSO$

   $END$
 */

/* $DOC$
   $AUTHOR$
      Copyright 2001 IntTec GmbH, Martin Vogel <vogel@inttec.de>
   $TEMPLATE$
      Function
   $NAME$
      hb_matherBlock()
   $CATEGORY$
      API
   $SUBCATEGORY$
      Math
   $ONELINER$
      Set/Get math error handling codeblock
   $SYNTAX$
      hb_matherBlock( [<bNewBlock>] ) --> bOldBlock
   $ARGUMENTS$
      <bNewBlock>
   $RETURNS$
      <bOldBlock> is the current error handler codeblock
   $DESCRIPTION$

   $EXAMPLES$

   $STATUS$
      R
   $COMPLIANCE$

   $PLATFORMS$
      All
   $FILES$
      Library is core
   $SEEALSO$

   $END$
 */