Bläddra i källkod

better precision for log(x, 10)

Roberto Ierusalimschy 16 år sedan
förälder
incheckning
8975739839
1 ändrade filer med 10 tillägg och 4 borttagningar
  1. 10 4
      lmathlib.c

+ 10 - 4
lmathlib.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lmathlib.c,v 1.69 2007/03/27 12:37:00 roberto Exp roberto $
+** $Id: lmathlib.c,v 1.70 2007/06/21 13:48:04 roberto Exp roberto $
 ** Standard mathematical library
 ** See Copyright Notice in lua.h
 */
@@ -112,9 +112,15 @@ static int math_pow (lua_State *L) {
 }
 
 static int math_log (lua_State *L) {
-  lua_Number res = log(luaL_checknumber(L, 1));
-  if (!lua_isnoneornil(L, 2))
-    res /= log(luaL_checknumber(L, 2));
+  lua_Number x = luaL_checknumber(L, 1);
+  lua_Number res;
+  if (lua_isnoneornil(L, 2))
+    res = log(x);
+  else {
+    lua_Number base = luaL_checknumber(L, 2);
+    if (base == 10.0) res = log10(x);
+    else res = log(x)/log(base);
+  }
   lua_pushnumber(L, res);
   return 1;
 }