diff options
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 | ||