diff options
author | Mike Pall <mike> | 2012-10-07 15:47:11 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2012-10-07 15:47:11 +0200 |
commit | 0561a5693884d76db5b75f7cc746478b325b311b (patch) | |
tree | beef0d8674adf5b0f24a101e4e92613ee85e996e /src/lib_math.c | |
parent | 0d62e2e1ab450a2d2d2291dc9da43606bd573bf7 (diff) | |
download | luajit-0561a5693884d76db5b75f7cc746478b325b311b.tar.gz luajit-0561a5693884d76db5b75f7cc746478b325b311b.tar.bz2 luajit-0561a5693884d76db5b75f7cc746478b325b311b.zip |
From Lua 5.2: Add math.log(x, base).
Diffstat (limited to 'src/lib_math.c')
-rw-r--r-- | src/lib_math.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/lib_math.c b/src/lib_math.c index a1d8a618..e4fc4c0f 100644 --- a/src/lib_math.c +++ b/src/lib_math.c | |||
@@ -33,7 +33,6 @@ LJLIB_ASM(math_sqrt) LJLIB_REC(math_unary IRFPM_SQRT) | |||
33 | lj_lib_checknum(L, 1); | 33 | lj_lib_checknum(L, 1); |
34 | return FFH_RETRY; | 34 | return FFH_RETRY; |
35 | } | 35 | } |
36 | LJLIB_ASM_(math_log) LJLIB_REC(math_unary IRFPM_LOG) | ||
37 | LJLIB_ASM_(math_log10) LJLIB_REC(math_unary IRFPM_LOG10) | 36 | LJLIB_ASM_(math_log10) LJLIB_REC(math_unary IRFPM_LOG10) |
38 | LJLIB_ASM_(math_exp) LJLIB_REC(math_unary IRFPM_EXP) | 37 | LJLIB_ASM_(math_exp) LJLIB_REC(math_unary IRFPM_EXP) |
39 | LJLIB_ASM_(math_sin) LJLIB_REC(math_unary IRFPM_SIN) | 38 | LJLIB_ASM_(math_sin) LJLIB_REC(math_unary IRFPM_SIN) |
@@ -48,6 +47,22 @@ LJLIB_ASM_(math_tanh) LJLIB_REC(math_htrig IRCALL_tanh) | |||
48 | LJLIB_ASM_(math_frexp) | 47 | LJLIB_ASM_(math_frexp) |
49 | LJLIB_ASM_(math_modf) LJLIB_REC(.) | 48 | LJLIB_ASM_(math_modf) LJLIB_REC(.) |
50 | 49 | ||
50 | LJLIB_ASM(math_log) LJLIB_REC(math_log) | ||
51 | { | ||
52 | double x = lj_lib_checknum(L, 1); | ||
53 | if (L->base+1 < L->top) { | ||
54 | double y = lj_lib_checknum(L, 2); | ||
55 | #ifdef LUAJIT_NO_LOG2 | ||
56 | x = log(x); y = 1.0 / log(y); | ||
57 | #else | ||
58 | x = lj_vm_log2(x); y = 1.0 / lj_vm_log2(y); | ||
59 | #endif | ||
60 | setnumV(L->base-1, x*y); /* Do NOT join the expression to x / y. */ | ||
61 | return FFH_RES(1); | ||
62 | } | ||
63 | return FFH_RETRY; | ||
64 | } | ||
65 | |||
51 | LJLIB_PUSH(57.29577951308232) | 66 | LJLIB_PUSH(57.29577951308232) |
52 | LJLIB_ASM_(math_deg) LJLIB_REC(math_degrad) | 67 | LJLIB_ASM_(math_deg) LJLIB_REC(math_degrad) |
53 | 68 | ||