static JSBool math_atan(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { jsdouble x, z; if (!js_ValueToNumber(cx, argv[0], &x)) return JS_FALSE; #ifdef XP_MAC if (x == 0) return js_NewNumberValue(cx, x, rval); #endif z = fd_atan(x); return js_NewNumberValue(cx, z, rval); }
static JSBool math_min(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { jsdouble x, z = *cx->runtime->jsPositiveInfinity; uintN i; if (argc == 0) { *rval = DOUBLE_TO_JSVAL(cx->runtime->jsPositiveInfinity); return JS_TRUE; } for (i = 0; i < argc; i++) { if (!js_ValueToNumber(cx, argv[i], &x)) return JS_FALSE; if (JSDOUBLE_IS_NaN(x)) { *rval = DOUBLE_TO_JSVAL(cx->runtime->jsNaN); return JS_TRUE; } if ((x == 0) && (x == z) && (fd_copysign(1.0, x) == -1)) z = x; else z = (x < z) ? x : z; } return js_NewNumberValue(cx, z, rval); }
static JSBool math_exp(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { jsdouble x, z; if (!js_ValueToNumber(cx, argv[0], &x)) return JS_FALSE; #ifdef _WIN32 if (!JSDOUBLE_IS_NaN(x)) { if (x == *cx->runtime->jsPositiveInfinity) { *rval = DOUBLE_TO_JSVAL(cx->runtime->jsPositiveInfinity); return JS_TRUE; } if (x == *cx->runtime->jsNegativeInfinity) { *rval = JSVAL_ZERO; return JS_TRUE; } } #endif z = fd_exp(x); return js_NewNumberValue(cx, z, rval); }
static JSBool math_tan(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { jsdouble x, z; if (!js_ValueToNumber(cx, argv[0], &x)) return JS_FALSE; z = fd_tan(x); return js_NewNumberValue(cx, z, rval); }
static JSBool math_round(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { jsdouble x, z; if (!js_ValueToNumber(cx, argv[0], &x)) return JS_FALSE; z = fd_copysign(fd_floor(x + 0.5), x); return js_NewNumberValue(cx, z, rval); }
static JSBool math_random(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { JSRuntime *rt; jsdouble z; rt = cx->runtime; JS_LOCK_RUNTIME(rt); random_init(rt); z = random_nextDouble(rt); JS_UNLOCK_RUNTIME(rt); return js_NewNumberValue(cx, z, rval); }
static JSBool math_pow(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { jsdouble x, y, z; if (!js_ValueToNumber(cx, argv[0], &x)) return JS_FALSE; if (!js_ValueToNumber(cx, argv[1], &y)) return JS_FALSE; #if !JS_USE_FDLIBM_MATH /* * Because C99 and ECMA specify different behavior for pow(), * we need to wrap the libm call to make it ECMA compliant. */ if (!JSDOUBLE_IS_FINITE(y) && (x == 1.0 || x == -1.0)) { *rval = DOUBLE_TO_JSVAL(cx->runtime->jsNaN); return JS_TRUE; } #endif z = fd_pow(x, y); return js_NewNumberValue(cx, z, rval); }