aboutsummaryrefslogtreecommitdiff
path: root/src/lib_math.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib_math.c')
-rw-r--r--src/lib_math.c17
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}
36LJLIB_ASM_(math_log) LJLIB_REC(math_unary IRFPM_LOG)
37LJLIB_ASM_(math_log10) LJLIB_REC(math_unary IRFPM_LOG10) 36LJLIB_ASM_(math_log10) LJLIB_REC(math_unary IRFPM_LOG10)
38LJLIB_ASM_(math_exp) LJLIB_REC(math_unary IRFPM_EXP) 37LJLIB_ASM_(math_exp) LJLIB_REC(math_unary IRFPM_EXP)
39LJLIB_ASM_(math_sin) LJLIB_REC(math_unary IRFPM_SIN) 38LJLIB_ASM_(math_sin) LJLIB_REC(math_unary IRFPM_SIN)
@@ -48,6 +47,22 @@ LJLIB_ASM_(math_tanh) LJLIB_REC(math_htrig IRCALL_tanh)
48LJLIB_ASM_(math_frexp) 47LJLIB_ASM_(math_frexp)
49LJLIB_ASM_(math_modf) LJLIB_REC(.) 48LJLIB_ASM_(math_modf) LJLIB_REC(.)
50 49
50LJLIB_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
51LJLIB_PUSH(57.29577951308232) 66LJLIB_PUSH(57.29577951308232)
52LJLIB_ASM_(math_deg) LJLIB_REC(math_degrad) 67LJLIB_ASM_(math_deg) LJLIB_REC(math_degrad)
53 68