Move math library into separate module
This commit is contained in:
parent
dc4c51ca5a
commit
b7caeefded
525
engine/builtin.c
525
engine/builtin.c
|
@ -273,507 +273,6 @@ static int PH7_builtin_empty(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
return PH7_OK;
|
return PH7_OK;
|
||||||
}
|
}
|
||||||
#ifndef PH7_DISABLE_BUILTIN_FUNC
|
#ifndef PH7_DISABLE_BUILTIN_FUNC
|
||||||
#ifdef PH7_ENABLE_MATH_FUNC
|
|
||||||
/*
|
|
||||||
* Section:
|
|
||||||
* Math Functions.
|
|
||||||
* Authors:
|
|
||||||
* Symisc Systems,devel@symisc.net.
|
|
||||||
* Copyright (C) Symisc Systems,http://ph7.symisc.net
|
|
||||||
* Status:
|
|
||||||
* Stable.
|
|
||||||
*/
|
|
||||||
#include <stdlib.h> /* abs */
|
|
||||||
#include <math.h>
|
|
||||||
/*
|
|
||||||
* float sqrt(float $arg )
|
|
||||||
* Square root of the given number.
|
|
||||||
* Parameter
|
|
||||||
* The number to process.
|
|
||||||
* Return
|
|
||||||
* The square root of arg or the special value Nan of failure.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_sqrt(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = sqrt(x);
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float exp(float $arg )
|
|
||||||
* Calculates the exponent of e.
|
|
||||||
* Parameter
|
|
||||||
* The number to process.
|
|
||||||
* Return
|
|
||||||
* 'e' raised to the power of arg.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_exp(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = exp(x);
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float floor(float $arg )
|
|
||||||
* Round fractions down.
|
|
||||||
* Parameter
|
|
||||||
* The number to process.
|
|
||||||
* Return
|
|
||||||
* Returns the next lowest integer value by rounding down value if necessary.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_floor(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = floor(x);
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float cos(float $arg )
|
|
||||||
* Cosine.
|
|
||||||
* Parameter
|
|
||||||
* The number to process.
|
|
||||||
* Return
|
|
||||||
* The cosine of arg.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_cos(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = cos(x);
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float acos(float $arg )
|
|
||||||
* Arc cosine.
|
|
||||||
* Parameter
|
|
||||||
* The number to process.
|
|
||||||
* Return
|
|
||||||
* The arc cosine of arg.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_acos(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = acos(x);
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float cosh(float $arg )
|
|
||||||
* Hyperbolic cosine.
|
|
||||||
* Parameter
|
|
||||||
* The number to process.
|
|
||||||
* Return
|
|
||||||
* The hyperbolic cosine of arg.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_cosh(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = cosh(x);
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float sin(float $arg )
|
|
||||||
* Sine.
|
|
||||||
* Parameter
|
|
||||||
* The number to process.
|
|
||||||
* Return
|
|
||||||
* The sine of arg.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_sin(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = sin(x);
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float asin(float $arg )
|
|
||||||
* Arc sine.
|
|
||||||
* Parameter
|
|
||||||
* The number to process.
|
|
||||||
* Return
|
|
||||||
* The arc sine of arg.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_asin(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = asin(x);
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float sinh(float $arg )
|
|
||||||
* Hyperbolic sine.
|
|
||||||
* Parameter
|
|
||||||
* The number to process.
|
|
||||||
* Return
|
|
||||||
* The hyperbolic sine of arg.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_sinh(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = sinh(x);
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float ceil(float $arg )
|
|
||||||
* Round fractions up.
|
|
||||||
* Parameter
|
|
||||||
* The number to process.
|
|
||||||
* Return
|
|
||||||
* The next highest integer value by rounding up value if necessary.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_ceil(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = ceil(x);
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float tan(float $arg )
|
|
||||||
* Tangent.
|
|
||||||
* Parameter
|
|
||||||
* The number to process.
|
|
||||||
* Return
|
|
||||||
* The tangent of arg.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_tan(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = tan(x);
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float atan(float $arg )
|
|
||||||
* Arc tangent.
|
|
||||||
* Parameter
|
|
||||||
* The number to process.
|
|
||||||
* Return
|
|
||||||
* The arc tangent of arg.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_atan(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = atan(x);
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float tanh(float $arg )
|
|
||||||
* Hyperbolic tangent.
|
|
||||||
* Parameter
|
|
||||||
* The number to process.
|
|
||||||
* Return
|
|
||||||
* The Hyperbolic tangent of arg.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_tanh(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = tanh(x);
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float atan2(float $y,float $x)
|
|
||||||
* Arc tangent of two variable.
|
|
||||||
* Parameter
|
|
||||||
* $y = Dividend parameter.
|
|
||||||
* $x = Divisor parameter.
|
|
||||||
* Return
|
|
||||||
* The arc tangent of y/x in radian.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_atan2(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x, y;
|
|
||||||
if(nArg < 2) {
|
|
||||||
/* Missing arguments,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
y = ph7_value_to_double(apArg[0]);
|
|
||||||
x = ph7_value_to_double(apArg[1]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = atan2(y, x);
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float/int64 abs(float/int64 $arg )
|
|
||||||
* Absolute value.
|
|
||||||
* Parameter
|
|
||||||
* The number to process.
|
|
||||||
* Return
|
|
||||||
* The absolute value of number.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_abs(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
int is_float;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
is_float = ph7_value_is_float(apArg[0]);
|
|
||||||
if(is_float) {
|
|
||||||
double r, x;
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = fabs(x);
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
} else {
|
|
||||||
int r, x;
|
|
||||||
x = ph7_value_to_int(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = abs(x);
|
|
||||||
ph7_result_int(pCtx, r);
|
|
||||||
}
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float log(float $arg,[int/float $base])
|
|
||||||
* Natural logarithm.
|
|
||||||
* Parameter
|
|
||||||
* $arg: The number to process.
|
|
||||||
* $base: The optional logarithmic base to use. (only base-10 is supported)
|
|
||||||
* Return
|
|
||||||
* The logarithm of arg to base, if given, or the natural logarithm.
|
|
||||||
* Note:
|
|
||||||
* only Natural log and base-10 log are supported.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_log(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
if(nArg == 2 && ph7_value_is_numeric(apArg[1]) && ph7_value_to_int(apArg[1]) == 10) {
|
|
||||||
/* Base-10 log */
|
|
||||||
r = log10(x);
|
|
||||||
} else {
|
|
||||||
r = log(x);
|
|
||||||
}
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float log10(float $arg )
|
|
||||||
* Base-10 logarithm.
|
|
||||||
* Parameter
|
|
||||||
* The number to process.
|
|
||||||
* Return
|
|
||||||
* The Base-10 logarithm of the given number.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_log10(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = log10(x);
|
|
||||||
/* store the result back */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* number pow(number $base,number $exp)
|
|
||||||
* Exponential expression.
|
|
||||||
* Parameter
|
|
||||||
* base
|
|
||||||
* The base to use.
|
|
||||||
* exp
|
|
||||||
* The exponent.
|
|
||||||
* Return
|
|
||||||
* base raised to the power of exp.
|
|
||||||
* If the result can be represented as integer it will be returned
|
|
||||||
* as type integer, else it will be returned as type float.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_pow(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double r, x, y;
|
|
||||||
if(nArg < 1) {
|
|
||||||
/* Missing argument,return 0 */
|
|
||||||
ph7_result_int(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
y = ph7_value_to_double(apArg[1]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = pow(x, y);
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float pi(void)
|
|
||||||
* Returns an approximation of pi.
|
|
||||||
* Note
|
|
||||||
* you can use the M_PI constant which yields identical results to pi().
|
|
||||||
* Return
|
|
||||||
* The value of pi as float.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_pi(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
SXUNUSED(nArg); /* cc warning */
|
|
||||||
SXUNUSED(apArg);
|
|
||||||
ph7_result_double(pCtx, PH7_PI);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float fmod(float $x,float $y)
|
|
||||||
* Returns the floating point remainder (modulo) of the division of the arguments.
|
|
||||||
* Parameters
|
|
||||||
* $x
|
|
||||||
* The dividend
|
|
||||||
* $y
|
|
||||||
* The divisor
|
|
||||||
* Return
|
|
||||||
* The floating point remainder of x/y.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_fmod(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double x, y, r;
|
|
||||||
if(nArg < 2) {
|
|
||||||
/* Missing arguments */
|
|
||||||
ph7_result_double(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/* Extract given arguments */
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
y = ph7_value_to_double(apArg[1]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = fmod(x, y);
|
|
||||||
/* Processing result */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* float hypot(float $x,float $y)
|
|
||||||
* Calculate the length of the hypotenuse of a right-angle triangle .
|
|
||||||
* Parameters
|
|
||||||
* $x
|
|
||||||
* Length of first side
|
|
||||||
* $y
|
|
||||||
* Length of first side
|
|
||||||
* Return
|
|
||||||
* Calculated length of the hypotenuse.
|
|
||||||
*/
|
|
||||||
static int PH7_builtin_hypot(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
|
||||||
double x, y, r;
|
|
||||||
if(nArg < 2) {
|
|
||||||
/* Missing arguments */
|
|
||||||
ph7_result_double(pCtx, 0);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
/* Extract given arguments */
|
|
||||||
x = ph7_value_to_double(apArg[0]);
|
|
||||||
y = ph7_value_to_double(apArg[1]);
|
|
||||||
/* Perform the requested operation */
|
|
||||||
r = hypot(x, y);
|
|
||||||
/* Processing result */
|
|
||||||
ph7_result_double(pCtx, r);
|
|
||||||
return PH7_OK;
|
|
||||||
}
|
|
||||||
#endif /* PH7_ENABLE_MATH_FUNC */
|
|
||||||
/*
|
/*
|
||||||
* float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )
|
* float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )
|
||||||
* Exponential expression.
|
* Exponential expression.
|
||||||
|
@ -8514,30 +8013,6 @@ static const ph7_builtin_func aBuiltInFunc[] = {
|
||||||
{ "strval", PH7_builtin_strval },
|
{ "strval", PH7_builtin_strval },
|
||||||
{ "empty", PH7_builtin_empty },
|
{ "empty", PH7_builtin_empty },
|
||||||
#ifndef PH7_DISABLE_BUILTIN_FUNC
|
#ifndef PH7_DISABLE_BUILTIN_FUNC
|
||||||
#ifdef PH7_ENABLE_MATH_FUNC
|
|
||||||
/* Math functions */
|
|
||||||
{ "abs", PH7_builtin_abs },
|
|
||||||
{ "sqrt", PH7_builtin_sqrt },
|
|
||||||
{ "exp", PH7_builtin_exp },
|
|
||||||
{ "floor", PH7_builtin_floor },
|
|
||||||
{ "cos", PH7_builtin_cos },
|
|
||||||
{ "sin", PH7_builtin_sin },
|
|
||||||
{ "acos", PH7_builtin_acos },
|
|
||||||
{ "asin", PH7_builtin_asin },
|
|
||||||
{ "cosh", PH7_builtin_cosh },
|
|
||||||
{ "sinh", PH7_builtin_sinh },
|
|
||||||
{ "ceil", PH7_builtin_ceil },
|
|
||||||
{ "tan", PH7_builtin_tan },
|
|
||||||
{ "tanh", PH7_builtin_tanh },
|
|
||||||
{ "atan", PH7_builtin_atan },
|
|
||||||
{ "atan2", PH7_builtin_atan2 },
|
|
||||||
{ "log", PH7_builtin_log },
|
|
||||||
{ "log10", PH7_builtin_log10 },
|
|
||||||
{ "pow", PH7_builtin_pow },
|
|
||||||
{ "pi", PH7_builtin_pi },
|
|
||||||
{ "fmod", PH7_builtin_fmod },
|
|
||||||
{ "hypot", PH7_builtin_hypot },
|
|
||||||
#endif /* PH7_ENABLE_MATH_FUNC */
|
|
||||||
{ "round", PH7_builtin_round },
|
{ "round", PH7_builtin_round },
|
||||||
{ "dechex", PH7_builtin_dechex },
|
{ "dechex", PH7_builtin_dechex },
|
||||||
{ "decoct", PH7_builtin_decoct },
|
{ "decoct", PH7_builtin_decoct },
|
||||||
|
|
|
@ -472,144 +472,6 @@ static void PH7_DBIA_Const(ph7_value *pVal, void *pUserData) {
|
||||||
ph7_value_int(pVal, 0x02); /* MUST BE A POWER OF TWO */
|
ph7_value_int(pVal, 0x02); /* MUST BE A POWER OF TWO */
|
||||||
SXUNUSED(pUserData);
|
SXUNUSED(pUserData);
|
||||||
}
|
}
|
||||||
#ifdef PH7_ENABLE_MATH_FUNC
|
|
||||||
/*
|
|
||||||
* M_PI
|
|
||||||
* Expand the value of pi.
|
|
||||||
*/
|
|
||||||
static void PH7_M_PI_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, PH7_PI);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_E
|
|
||||||
* Expand 2.7182818284590452354
|
|
||||||
*/
|
|
||||||
static void PH7_M_E_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 2.7182818284590452354);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_LOG2E
|
|
||||||
* Expand 2.7182818284590452354
|
|
||||||
*/
|
|
||||||
static void PH7_M_LOG2E_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 1.4426950408889634074);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_LOG10E
|
|
||||||
* Expand 0.4342944819032518276
|
|
||||||
*/
|
|
||||||
static void PH7_M_LOG10E_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 0.4342944819032518276);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_LN2
|
|
||||||
* Expand 0.69314718055994530942
|
|
||||||
*/
|
|
||||||
static void PH7_M_LN2_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 0.69314718055994530942);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_LN10
|
|
||||||
* Expand 2.30258509299404568402
|
|
||||||
*/
|
|
||||||
static void PH7_M_LN10_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 2.30258509299404568402);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_PI_2
|
|
||||||
* Expand 1.57079632679489661923
|
|
||||||
*/
|
|
||||||
static void PH7_M_PI_2_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 1.57079632679489661923);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_PI_4
|
|
||||||
* Expand 0.78539816339744830962
|
|
||||||
*/
|
|
||||||
static void PH7_M_PI_4_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 0.78539816339744830962);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_1_PI
|
|
||||||
* Expand 0.31830988618379067154
|
|
||||||
*/
|
|
||||||
static void PH7_M_1_PI_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 0.31830988618379067154);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_2_PI
|
|
||||||
* Expand 0.63661977236758134308
|
|
||||||
*/
|
|
||||||
static void PH7_M_2_PI_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 0.63661977236758134308);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_SQRTPI
|
|
||||||
* Expand 1.77245385090551602729
|
|
||||||
*/
|
|
||||||
static void PH7_M_SQRTPI_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 1.77245385090551602729);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_2_SQRTPI
|
|
||||||
* Expand 1.12837916709551257390
|
|
||||||
*/
|
|
||||||
static void PH7_M_2_SQRTPI_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 1.12837916709551257390);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_SQRT2
|
|
||||||
* Expand 1.41421356237309504880
|
|
||||||
*/
|
|
||||||
static void PH7_M_SQRT2_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 1.41421356237309504880);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_SQRT3
|
|
||||||
* Expand 1.73205080756887729352
|
|
||||||
*/
|
|
||||||
static void PH7_M_SQRT3_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 1.73205080756887729352);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_SQRT1_2
|
|
||||||
* Expand 0.70710678118654752440
|
|
||||||
*/
|
|
||||||
static void PH7_M_SQRT1_2_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 0.70710678118654752440);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_LNPI
|
|
||||||
* Expand 1.14472988584940017414
|
|
||||||
*/
|
|
||||||
static void PH7_M_LNPI_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 1.14472988584940017414);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* M_EULER
|
|
||||||
* Expand 0.57721566490153286061
|
|
||||||
*/
|
|
||||||
static void PH7_M_EULER_Const(ph7_value *pVal, void *pUserData) {
|
|
||||||
SXUNUSED(pUserData); /* cc warning */
|
|
||||||
ph7_value_double(pVal, 0.57721566490153286061);
|
|
||||||
}
|
|
||||||
#endif /* PH7_DISABLE_BUILTIN_MATH */
|
|
||||||
/*
|
/*
|
||||||
* DATE_ATOM
|
* DATE_ATOM
|
||||||
* Expand Atom (example: 2005-08-15T15:52:01+00:00)
|
* Expand Atom (example: 2005-08-15T15:52:01+00:00)
|
||||||
|
@ -1366,25 +1228,6 @@ static const ph7_builtin_constant aBuiltIn[] = {
|
||||||
{"PHP_ROUND_HALF_ODD", PH7_PHP_ROUND_HALF_ODD_Const },
|
{"PHP_ROUND_HALF_ODD", PH7_PHP_ROUND_HALF_ODD_Const },
|
||||||
{"DEBUG_BACKTRACE_IGNORE_ARGS", PH7_DBIA_Const },
|
{"DEBUG_BACKTRACE_IGNORE_ARGS", PH7_DBIA_Const },
|
||||||
{"DEBUG_BACKTRACE_PROVIDE_OBJECT", PH7_DBPO_Const},
|
{"DEBUG_BACKTRACE_PROVIDE_OBJECT", PH7_DBPO_Const},
|
||||||
#ifdef PH7_ENABLE_MATH_FUNC
|
|
||||||
{"M_PI", PH7_M_PI_Const },
|
|
||||||
{"M_E", PH7_M_E_Const },
|
|
||||||
{"M_LOG2E", PH7_M_LOG2E_Const },
|
|
||||||
{"M_LOG10E", PH7_M_LOG10E_Const },
|
|
||||||
{"M_LN2", PH7_M_LN2_Const },
|
|
||||||
{"M_LN10", PH7_M_LN10_Const },
|
|
||||||
{"M_PI_2", PH7_M_PI_2_Const },
|
|
||||||
{"M_PI_4", PH7_M_PI_4_Const },
|
|
||||||
{"M_1_PI", PH7_M_1_PI_Const },
|
|
||||||
{"M_2_PI", PH7_M_2_PI_Const },
|
|
||||||
{"M_SQRTPI", PH7_M_SQRTPI_Const },
|
|
||||||
{"M_2_SQRTPI", PH7_M_2_SQRTPI_Const },
|
|
||||||
{"M_SQRT2", PH7_M_SQRT2_Const },
|
|
||||||
{"M_SQRT3", PH7_M_SQRT3_Const },
|
|
||||||
{"M_SQRT1_2", PH7_M_SQRT1_2_Const },
|
|
||||||
{"M_LNPI", PH7_M_LNPI_Const },
|
|
||||||
{"M_EULER", PH7_M_EULER_Const },
|
|
||||||
#endif /* PH7_ENABLE_MATH_FUNC */
|
|
||||||
{"DATE_ATOM", PH7_DATE_ATOM_Const },
|
{"DATE_ATOM", PH7_DATE_ATOM_Const },
|
||||||
{"DATE_COOKIE", PH7_DATE_COOKIE_Const },
|
{"DATE_COOKIE", PH7_DATE_COOKIE_Const },
|
||||||
{"DATE_ISO8601", PH7_DATE_ISO8601_Const },
|
{"DATE_ISO8601", PH7_DATE_ISO8601_Const },
|
||||||
|
|
|
@ -20,10 +20,7 @@
|
||||||
#else
|
#else
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#endif
|
#endif
|
||||||
#ifndef PH7_PI
|
|
||||||
/* Value of PI */
|
|
||||||
#define PH7_PI 3.1415926535898
|
|
||||||
#endif
|
|
||||||
/*
|
/*
|
||||||
* Constants for the largest and smallest possible 64-bit signed integers.
|
* Constants for the largest and smallest possible 64-bit signed integers.
|
||||||
* These macros are designed to work correctly on both 32-bit and 64-bit
|
* These macros are designed to work correctly on both 32-bit and 64-bit
|
||||||
|
|
|
@ -0,0 +1,647 @@
|
||||||
|
#include "math.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* M_PI
|
||||||
|
* Expand the value of pi.
|
||||||
|
*/
|
||||||
|
static void PH7_M_PI_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, PH7_PI);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_E
|
||||||
|
* Expand 2.7182818284590452354
|
||||||
|
*/
|
||||||
|
static void PH7_M_E_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 2.7182818284590452354);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_LOG2E
|
||||||
|
* Expand 2.7182818284590452354
|
||||||
|
*/
|
||||||
|
static void PH7_M_LOG2E_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 1.4426950408889634074);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_LOG10E
|
||||||
|
* Expand 0.4342944819032518276
|
||||||
|
*/
|
||||||
|
static void PH7_M_LOG10E_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 0.4342944819032518276);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_LN2
|
||||||
|
* Expand 0.69314718055994530942
|
||||||
|
*/
|
||||||
|
static void PH7_M_LN2_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 0.69314718055994530942);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_LN10
|
||||||
|
* Expand 2.30258509299404568402
|
||||||
|
*/
|
||||||
|
static void PH7_M_LN10_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 2.30258509299404568402);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_PI_2
|
||||||
|
* Expand 1.57079632679489661923
|
||||||
|
*/
|
||||||
|
static void PH7_M_PI_2_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 1.57079632679489661923);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_PI_4
|
||||||
|
* Expand 0.78539816339744830962
|
||||||
|
*/
|
||||||
|
static void PH7_M_PI_4_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 0.78539816339744830962);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_1_PI
|
||||||
|
* Expand 0.31830988618379067154
|
||||||
|
*/
|
||||||
|
static void PH7_M_1_PI_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 0.31830988618379067154);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_2_PI
|
||||||
|
* Expand 0.63661977236758134308
|
||||||
|
*/
|
||||||
|
static void PH7_M_2_PI_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 0.63661977236758134308);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_SQRTPI
|
||||||
|
* Expand 1.77245385090551602729
|
||||||
|
*/
|
||||||
|
static void PH7_M_SQRTPI_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 1.77245385090551602729);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_2_SQRTPI
|
||||||
|
* Expand 1.12837916709551257390
|
||||||
|
*/
|
||||||
|
static void PH7_M_2_SQRTPI_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 1.12837916709551257390);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_SQRT2
|
||||||
|
* Expand 1.41421356237309504880
|
||||||
|
*/
|
||||||
|
static void PH7_M_SQRT2_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 1.41421356237309504880);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_SQRT3
|
||||||
|
* Expand 1.73205080756887729352
|
||||||
|
*/
|
||||||
|
static void PH7_M_SQRT3_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 1.73205080756887729352);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_SQRT1_2
|
||||||
|
* Expand 0.70710678118654752440
|
||||||
|
*/
|
||||||
|
static void PH7_M_SQRT1_2_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 0.70710678118654752440);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_LNPI
|
||||||
|
* Expand 1.14472988584940017414
|
||||||
|
*/
|
||||||
|
static void PH7_M_LNPI_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 1.14472988584940017414);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* M_EULER
|
||||||
|
* Expand 0.57721566490153286061
|
||||||
|
*/
|
||||||
|
static void PH7_M_EULER_Const(ph7_value *pVal, void *pUserData) {
|
||||||
|
SXUNUSED(pUserData); /* cc warning */
|
||||||
|
ph7_value_double(pVal, 0.57721566490153286061);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float sqrt(float $arg )
|
||||||
|
* Square root of the given number.
|
||||||
|
* Parameter
|
||||||
|
* The number to process.
|
||||||
|
* Return
|
||||||
|
* The square root of arg or the special value Nan of failure.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_sqrt(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = sqrt(x);
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float exp(float $arg )
|
||||||
|
* Calculates the exponent of e.
|
||||||
|
* Parameter
|
||||||
|
* The number to process.
|
||||||
|
* Return
|
||||||
|
* 'e' raised to the power of arg.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_exp(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = exp(x);
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float floor(float $arg )
|
||||||
|
* Round fractions down.
|
||||||
|
* Parameter
|
||||||
|
* The number to process.
|
||||||
|
* Return
|
||||||
|
* Returns the next lowest integer value by rounding down value if necessary.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_floor(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = floor(x);
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float cos(float $arg )
|
||||||
|
* Cosine.
|
||||||
|
* Parameter
|
||||||
|
* The number to process.
|
||||||
|
* Return
|
||||||
|
* The cosine of arg.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_cos(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = cos(x);
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float acos(float $arg )
|
||||||
|
* Arc cosine.
|
||||||
|
* Parameter
|
||||||
|
* The number to process.
|
||||||
|
* Return
|
||||||
|
* The arc cosine of arg.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_acos(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = acos(x);
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float cosh(float $arg )
|
||||||
|
* Hyperbolic cosine.
|
||||||
|
* Parameter
|
||||||
|
* The number to process.
|
||||||
|
* Return
|
||||||
|
* The hyperbolic cosine of arg.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_cosh(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = cosh(x);
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float sin(float $arg )
|
||||||
|
* Sine.
|
||||||
|
* Parameter
|
||||||
|
* The number to process.
|
||||||
|
* Return
|
||||||
|
* The sine of arg.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_sin(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = sin(x);
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float asin(float $arg )
|
||||||
|
* Arc sine.
|
||||||
|
* Parameter
|
||||||
|
* The number to process.
|
||||||
|
* Return
|
||||||
|
* The arc sine of arg.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_asin(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = asin(x);
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float sinh(float $arg )
|
||||||
|
* Hyperbolic sine.
|
||||||
|
* Parameter
|
||||||
|
* The number to process.
|
||||||
|
* Return
|
||||||
|
* The hyperbolic sine of arg.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_sinh(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = sinh(x);
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float ceil(float $arg )
|
||||||
|
* Round fractions up.
|
||||||
|
* Parameter
|
||||||
|
* The number to process.
|
||||||
|
* Return
|
||||||
|
* The next highest integer value by rounding up value if necessary.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_ceil(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = ceil(x);
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float tan(float $arg )
|
||||||
|
* Tangent.
|
||||||
|
* Parameter
|
||||||
|
* The number to process.
|
||||||
|
* Return
|
||||||
|
* The tangent of arg.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_tan(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = tan(x);
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float atan(float $arg )
|
||||||
|
* Arc tangent.
|
||||||
|
* Parameter
|
||||||
|
* The number to process.
|
||||||
|
* Return
|
||||||
|
* The arc tangent of arg.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_atan(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = atan(x);
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float tanh(float $arg )
|
||||||
|
* Hyperbolic tangent.
|
||||||
|
* Parameter
|
||||||
|
* The number to process.
|
||||||
|
* Return
|
||||||
|
* The Hyperbolic tangent of arg.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_tanh(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = tanh(x);
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float atan2(float $y,float $x)
|
||||||
|
* Arc tangent of two variable.
|
||||||
|
* Parameter
|
||||||
|
* $y = Dividend parameter.
|
||||||
|
* $x = Divisor parameter.
|
||||||
|
* Return
|
||||||
|
* The arc tangent of y/x in radian.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_atan2(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x, y;
|
||||||
|
if(nArg < 2) {
|
||||||
|
/* Missing arguments,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
y = ph7_value_to_double(apArg[0]);
|
||||||
|
x = ph7_value_to_double(apArg[1]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = atan2(y, x);
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float/int64 abs(float/int64 $arg )
|
||||||
|
* Absolute value.
|
||||||
|
* Parameter
|
||||||
|
* The number to process.
|
||||||
|
* Return
|
||||||
|
* The absolute value of number.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_abs(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
int is_float;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
is_float = ph7_value_is_float(apArg[0]);
|
||||||
|
if(is_float) {
|
||||||
|
double r, x;
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = fabs(x);
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
} else {
|
||||||
|
int r, x;
|
||||||
|
x = ph7_value_to_int(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = abs(x);
|
||||||
|
ph7_result_int(pCtx, r);
|
||||||
|
}
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float log(float $arg,[int/float $base])
|
||||||
|
* Natural logarithm.
|
||||||
|
* Parameter
|
||||||
|
* $arg: The number to process.
|
||||||
|
* $base: The optional logarithmic base to use. (only base-10 is supported)
|
||||||
|
* Return
|
||||||
|
* The logarithm of arg to base, if given, or the natural logarithm.
|
||||||
|
* Note:
|
||||||
|
* only Natural log and base-10 log are supported.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_log(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
if(nArg == 2 && ph7_value_is_numeric(apArg[1]) && ph7_value_to_int(apArg[1]) == 10) {
|
||||||
|
/* Base-10 log */
|
||||||
|
r = log10(x);
|
||||||
|
} else {
|
||||||
|
r = log(x);
|
||||||
|
}
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float log10(float $arg )
|
||||||
|
* Base-10 logarithm.
|
||||||
|
* Parameter
|
||||||
|
* The number to process.
|
||||||
|
* Return
|
||||||
|
* The Base-10 logarithm of the given number.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_log10(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = log10(x);
|
||||||
|
/* store the result back */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* number pow(number $base,number $exp)
|
||||||
|
* Exponential expression.
|
||||||
|
* Parameter
|
||||||
|
* base
|
||||||
|
* The base to use.
|
||||||
|
* exp
|
||||||
|
* The exponent.
|
||||||
|
* Return
|
||||||
|
* base raised to the power of exp.
|
||||||
|
* If the result can be represented as integer it will be returned
|
||||||
|
* as type integer, else it will be returned as type float.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_pow(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double r, x, y;
|
||||||
|
if(nArg < 1) {
|
||||||
|
/* Missing argument,return 0 */
|
||||||
|
ph7_result_int(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
y = ph7_value_to_double(apArg[1]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = pow(x, y);
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float pi(void)
|
||||||
|
* Returns an approximation of pi.
|
||||||
|
* Note
|
||||||
|
* you can use the M_PI constant which yields identical results to pi().
|
||||||
|
* Return
|
||||||
|
* The value of pi as float.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_pi(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
SXUNUSED(nArg); /* cc warning */
|
||||||
|
SXUNUSED(apArg);
|
||||||
|
ph7_result_double(pCtx, PH7_PI);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float fmod(float $x,float $y)
|
||||||
|
* Returns the floating point remainder (modulo) of the division of the arguments.
|
||||||
|
* Parameters
|
||||||
|
* $x
|
||||||
|
* The dividend
|
||||||
|
* $y
|
||||||
|
* The divisor
|
||||||
|
* Return
|
||||||
|
* The floating point remainder of x/y.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_fmod(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double x, y, r;
|
||||||
|
if(nArg < 2) {
|
||||||
|
/* Missing arguments */
|
||||||
|
ph7_result_double(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/* Extract given arguments */
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
y = ph7_value_to_double(apArg[1]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = fmod(x, y);
|
||||||
|
/* Processing result */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* float hypot(float $x,float $y)
|
||||||
|
* Calculate the length of the hypotenuse of a right-angle triangle .
|
||||||
|
* Parameters
|
||||||
|
* $x
|
||||||
|
* Length of first side
|
||||||
|
* $y
|
||||||
|
* Length of first side
|
||||||
|
* Return
|
||||||
|
* Calculated length of the hypotenuse.
|
||||||
|
*/
|
||||||
|
static int PH7_builtin_hypot(ph7_context *pCtx, int nArg, ph7_value **apArg) {
|
||||||
|
double x, y, r;
|
||||||
|
if(nArg < 2) {
|
||||||
|
/* Missing arguments */
|
||||||
|
ph7_result_double(pCtx, 0);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
/* Extract given arguments */
|
||||||
|
x = ph7_value_to_double(apArg[0]);
|
||||||
|
y = ph7_value_to_double(apArg[1]);
|
||||||
|
/* Perform the requested operation */
|
||||||
|
r = hypot(x, y);
|
||||||
|
/* Processing result */
|
||||||
|
ph7_result_double(pCtx, r);
|
||||||
|
return PH7_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
PH7_PRIVATE sxi32 initializeModule(ph7_vm *pVm, ph7_real *ver, SyString *desc){
|
||||||
|
sxi32 rc;
|
||||||
|
sxu32 n;
|
||||||
|
|
||||||
|
desc->zString = MODULE_DESC;
|
||||||
|
*ver = MODULE_VER;
|
||||||
|
for(n = 0; n < SX_ARRAYSIZE(mathConstList); ++n) {
|
||||||
|
rc = ph7_create_constant(&(*pVm), mathConstList[n].zName, mathConstList[n].xExpand, &(*pVm));
|
||||||
|
if(rc != SXRET_OK) {
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(n = 0 ; n < SX_ARRAYSIZE(mathFuncList) ; ++n) {
|
||||||
|
rc = ph7_create_function(&(*pVm), mathFuncList[n].zName, mathFuncList[n].xFunc, &(*pVm));
|
||||||
|
if(rc != SXRET_OK) {
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return SXRET_OK;
|
||||||
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
#ifndef __MATH_H__
|
||||||
|
#define __MATH_H__
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
#include "ph7.h"
|
||||||
|
#include "ph7int.h"
|
||||||
|
|
||||||
|
#define MODULE_DESC "Math Module"
|
||||||
|
#define MODULE_VER 1.0
|
||||||
|
|
||||||
|
#define PH7_PI 3.1415926535898
|
||||||
|
|
||||||
|
/* Forward reference & declaration */
|
||||||
|
static void PH7_M_PI_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_E_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_LOG2E_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_LOG10E_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_LN2_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_LN10_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_PI_2_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_PI_4_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_1_PI_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_2_PI_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_SQRTPI_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_2_SQRTPI_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_SQRT2_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_SQRT3_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_SQRT1_2_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_LNPI_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static void PH7_M_EULER_Const(ph7_value *pVal, void *pUserData);
|
||||||
|
static int PH7_builtin_sqrt(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_exp(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_floor(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_cos(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_acos(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_cosh(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_sin(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_asin(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_sinh(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_ceil(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_tan(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_atan(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_tanh(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_atan2(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_abs(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_log(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_log10(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_pow(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_pi(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_fmod(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
static int PH7_builtin_hypot(ph7_context *pCtx, int nArg, ph7_value **apArg);
|
||||||
|
PH7_PRIVATE sxi32 initializeModule(ph7_vm *pVm, ph7_real *ver, SyString *desc);
|
||||||
|
|
||||||
|
static const ph7_builtin_constant mathConstList[] = {
|
||||||
|
{"M_PI", PH7_M_PI_Const },
|
||||||
|
{"M_E", PH7_M_E_Const },
|
||||||
|
{"M_LOG2E", PH7_M_LOG2E_Const },
|
||||||
|
{"M_LOG10E", PH7_M_LOG10E_Const },
|
||||||
|
{"M_LN2", PH7_M_LN2_Const },
|
||||||
|
{"M_LN10", PH7_M_LN10_Const },
|
||||||
|
{"M_PI_2", PH7_M_PI_2_Const },
|
||||||
|
{"M_PI_4", PH7_M_PI_4_Const },
|
||||||
|
{"M_1_PI", PH7_M_1_PI_Const },
|
||||||
|
{"M_2_PI", PH7_M_2_PI_Const },
|
||||||
|
{"M_SQRTPI", PH7_M_SQRTPI_Const },
|
||||||
|
{"M_2_SQRTPI", PH7_M_2_SQRTPI_Const },
|
||||||
|
{"M_SQRT2", PH7_M_SQRT2_Const },
|
||||||
|
{"M_SQRT3", PH7_M_SQRT3_Const },
|
||||||
|
{"M_SQRT1_2", PH7_M_SQRT1_2_Const },
|
||||||
|
{"M_LNPI", PH7_M_LNPI_Const },
|
||||||
|
{"M_EULER", PH7_M_EULER_Const }
|
||||||
|
};
|
||||||
|
|
||||||
|
static const ph7_builtin_func mathFuncList[] = {
|
||||||
|
{ "abs", PH7_builtin_abs },
|
||||||
|
{ "sqrt", PH7_builtin_sqrt },
|
||||||
|
{ "exp", PH7_builtin_exp },
|
||||||
|
{ "floor", PH7_builtin_floor },
|
||||||
|
{ "cos", PH7_builtin_cos },
|
||||||
|
{ "sin", PH7_builtin_sin },
|
||||||
|
{ "acos", PH7_builtin_acos },
|
||||||
|
{ "asin", PH7_builtin_asin },
|
||||||
|
{ "cosh", PH7_builtin_cosh },
|
||||||
|
{ "sinh", PH7_builtin_sinh },
|
||||||
|
{ "ceil", PH7_builtin_ceil },
|
||||||
|
{ "tan", PH7_builtin_tan },
|
||||||
|
{ "tanh", PH7_builtin_tanh },
|
||||||
|
{ "atan", PH7_builtin_atan },
|
||||||
|
{ "atan2", PH7_builtin_atan2 },
|
||||||
|
{ "log", PH7_builtin_log },
|
||||||
|
{ "log10", PH7_builtin_log10 },
|
||||||
|
{ "pow", PH7_builtin_pow },
|
||||||
|
{ "pi", PH7_builtin_pi },
|
||||||
|
{ "fmod", PH7_builtin_fmod },
|
||||||
|
{ "hypot", PH7_builtin_hypot }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue