فهرست منبع

Lua standard mathematical library

Roberto Ierusalimschy 28 سال پیش
والد
کامیت
b945fae40e
3فایلهای تغییر یافته به همراه195 افزوده شده و 234 حذف شده
  1. 195 0
      lmathlib.c
  2. 0 221
      mathlib.c
  3. 0 13
      mathlib.h

+ 195 - 0
lmathlib.c

@@ -0,0 +1,195 @@
+/*
+** $Id: $
+** Lua standard mathematical library
+** See Copyright Notice in lua.h
+*/
+
+
+#include <stdlib.h>
+#include <math.h>
+
+#include "lauxlib.h"
+#include "lua.h"
+#include "lualib.h"
+
+#ifndef PI
+#define PI          3.14159265358979323846
+#endif
+
+#define TODEGREE(a) ((a)*180.0/PI)
+#define TORAD(a)    ((a)*PI/180.0)
+
+
+
+static void math_abs (void)
+{
+  double d = luaL_check_number(1);
+  if (d < 0) d = -d;
+  lua_pushnumber(d);
+}
+
+static void math_sin (void)
+{
+  lua_pushnumber(sin(TORAD(luaL_check_number(1))));
+}
+
+static void math_cos (void)
+{
+  lua_pushnumber(cos(TORAD(luaL_check_number(1))));
+}
+
+static void math_tan (void)
+{
+  lua_pushnumber(tan(TORAD(luaL_check_number(1))));
+}
+
+static void math_asin (void)
+{
+  lua_pushnumber(asin(TODEGREE(luaL_check_number(1))));
+}
+
+static void math_acos (void)
+{
+  lua_pushnumber(acos(TODEGREE(luaL_check_number(1))));
+}
+
+static void math_atan (void)
+{
+  lua_pushnumber(atan(TODEGREE(luaL_check_number(1))));
+}
+
+static void math_atan2 (void)
+{
+  lua_pushnumber(TODEGREE(atan2(luaL_check_number(1), luaL_check_number(2))));
+}
+
+static void math_ceil (void)
+{
+  lua_pushnumber(ceil(luaL_check_number(1)));
+}
+
+static void math_floor (void)
+{
+  lua_pushnumber(floor(luaL_check_number(1)));
+}
+
+static void math_mod (void)
+{
+  lua_pushnumber(fmod(luaL_check_number(1), luaL_check_number(2)));
+}
+
+static void math_sqrt (void)
+{
+  lua_pushnumber(sqrt(luaL_check_number(1)));
+}
+
+static void math_pow (void)
+{
+  lua_pushnumber(pow(luaL_check_number(1), luaL_check_number(2)));
+}
+
+static void math_log (void)
+{
+  lua_pushnumber(log(luaL_check_number(1)));
+}
+
+static void math_log10 (void)
+{
+  lua_pushnumber(log10(luaL_check_number(1)));
+}
+
+static void math_exp (void)
+{
+  lua_pushnumber(exp(luaL_check_number(1)));
+}
+
+static void math_deg (void)
+{
+  lua_pushnumber(luaL_check_number(1)*180./PI);
+}
+
+static void math_rad (void)
+{
+  lua_pushnumber(luaL_check_number(1)/180.*PI);
+}
+
+
+
+static void math_min (void)
+{
+  int i = 1;
+  double dmin = luaL_check_number(i);
+  while (lua_getparam(++i) != LUA_NOOBJECT) {
+    double d = luaL_check_number(i);
+    if (d < dmin)
+      dmin = d;
+  }
+  lua_pushnumber(dmin);
+}
+
+
+static void math_max (void)
+{
+  int i = 1;
+  double dmax = luaL_check_number(i);
+  while (lua_getparam(++i) != LUA_NOOBJECT) {
+    double d = luaL_check_number(i);
+    if (d > dmax)
+      dmax = d;
+  }
+  lua_pushnumber(dmax);
+}
+
+
+static void math_random (void)
+{
+  double l = luaL_opt_number(1, 0);
+  double r = (double)rand() / (double)RAND_MAX;
+  if (l == 0)
+    lua_pushnumber(r);
+  else
+    lua_pushnumber((int)(r*l)+1);
+}
+
+
+static void math_randomseed (void)
+{
+  srand(luaL_check_number(1));
+}
+
+
+static struct luaL_reg mathlib[] = {
+{"abs",   math_abs},
+{"sin",   math_sin},
+{"cos",   math_cos},
+{"tan",   math_tan},
+{"asin",  math_asin},
+{"acos",  math_acos},
+{"atan",  math_atan},
+{"atan2",  math_atan2},
+{"ceil",  math_ceil},
+{"floor", math_floor},
+{"mod",   math_mod},
+{"sqrt",  math_sqrt},
+{"min",   math_min},
+{"max",   math_max},
+{"log",   math_log},
+{"log10", math_log10},
+{"exp",   math_exp},
+{"deg",   math_deg},
+{"rad",   math_rad},
+{"random",     math_random},
+{"randomseed", math_randomseed}
+};
+
+/*
+** Open math library
+*/
+void lua_mathlibopen (void)
+{
+  luaL_openlib(mathlib, (sizeof(mathlib)/sizeof(mathlib[0])));
+  lua_pushcfunction(math_pow);
+  lua_pushnumber(0);  /* to get its tag */
+  lua_settagmethod(lua_tag(lua_pop()), "pow");
+}
+

+ 0 - 221
mathlib.c

@@ -1,221 +0,0 @@
-/*
-** mathlib.c
-** Mathematics library to LUA
-*/
-
-char *rcs_mathlib="$Id: mathlib.c,v 1.25 1997/06/19 18:03:04 roberto Exp roberto $";
-
-#include <stdlib.h>
-#include <math.h>
-
-#include "lualib.h"
-#include "auxlib.h"
-#include "lua.h"
-
-#ifndef PI
-#define PI          3.14159265358979323846
-#endif
-#define TODEGREE(a) ((a)*180.0/PI)
-#define TORAD(a)    ((a)*PI/180.0)
-
-static void math_abs (void)
-{
- double d = luaL_check_number(1); 
- if (d < 0) d = -d;
- lua_pushnumber (d);
-}
-
-
-static void math_sin (void)
-{
- double d = luaL_check_number(1);
- lua_pushnumber (sin(TORAD(d)));
-}
-
-
-
-static void math_cos (void)
-{
- double d = luaL_check_number(1);
- lua_pushnumber (cos(TORAD(d)));
-}
-
-
-
-static void math_tan (void)
-{
- double d = luaL_check_number(1);
- lua_pushnumber (tan(TORAD(d)));
-}
-
-
-static void math_asin (void)
-{
- double d = luaL_check_number(1);
- lua_pushnumber (TODEGREE(asin(d)));
-}
-
-
-static void math_acos (void)
-{
- double d = luaL_check_number(1);
- lua_pushnumber (TODEGREE(acos(d)));
-}
-
-
-static void math_atan (void)
-{
- double d = luaL_check_number(1);
- lua_pushnumber (TODEGREE(atan(d)));
-}
-
-
-static void math_atan2 (void)
-{
- double d1 = luaL_check_number(1);
- double d2 = luaL_check_number(2);
- lua_pushnumber (TODEGREE(atan2(d1, d2)));
-}
-
-
-static void math_ceil (void)
-{
- double d = luaL_check_number(1);
- lua_pushnumber (ceil(d));
-}
-
-
-static void math_floor (void)
-{
- double d = luaL_check_number(1);
- lua_pushnumber (floor(d));
-}
-
-static void math_mod (void)
-{
-  float x = luaL_check_number(1);
-  float y = luaL_check_number(2);
-  lua_pushnumber(fmod(x, y));
-}
-
-
-static void math_sqrt (void)
-{
- double d = luaL_check_number(1);
- lua_pushnumber (sqrt(d));
-}
-
-
-static void math_pow (void)
-{
-  double d1 = luaL_check_number(1);
-  double d2 = luaL_check_number(2);
-  lua_pushnumber(pow(d1,d2));
-}
-
-static void math_min (void)
-{
- int i=1;
- double dmin = luaL_check_number(i);
- while (lua_getparam(++i) != LUA_NOOBJECT)
- {
-  double d = luaL_check_number(i);
-  if (d < dmin) dmin = d;
- }
- lua_pushnumber (dmin);
-}
-
-static void math_max (void)
-{
- int i=1;
- double dmax = luaL_check_number(i);
- while (lua_getparam(++i) != LUA_NOOBJECT)
- {
-  double d = luaL_check_number(i);
-  if (d > dmax) dmax = d;
- }
- lua_pushnumber (dmax);
-}
-
-static void math_log (void)
-{
- double d = luaL_check_number(1);
- lua_pushnumber (log(d));
-}
-
-
-static void math_log10 (void)
-{
- double d = luaL_check_number(1);
- lua_pushnumber (log10(d));
-}
-
-
-static void math_exp (void)
-{
- double d = luaL_check_number(1);
- lua_pushnumber (exp(d));
-}
-
-static void math_deg (void)
-{
- float d = luaL_check_number(1);
- lua_pushnumber (d*180./PI);
-}
-
-static void math_rad (void)
-{
- float d = luaL_check_number(1);
- lua_pushnumber (d/180.*PI);
-}
-
-static void math_random (void)
-{
-  double r = (double)(rand()%RAND_MAX) / (double)RAND_MAX;
-  if (lua_getparam(1) == LUA_NOOBJECT)
-    lua_pushnumber(r);
-  else
-    lua_pushnumber((int)(r*luaL_check_number(1)) + 1);
-}
-
-static void math_randomseed (void)
-{
-  srand(luaL_check_number(1));
-}
-
-
-static struct luaL_reg mathlib[] = {
-{"abs",   math_abs},
-{"sin",   math_sin},
-{"cos",   math_cos},
-{"tan",   math_tan},
-{"asin",  math_asin},
-{"acos",  math_acos},
-{"atan",  math_atan},
-{"atan2",  math_atan2},
-{"ceil",  math_ceil},
-{"floor", math_floor},
-{"mod",   math_mod},
-{"sqrt",  math_sqrt},
-{"min",   math_min},
-{"max",   math_max},
-{"log",   math_log},
-{"log10", math_log10},
-{"exp",   math_exp},
-{"deg",   math_deg},
-{"rad",   math_rad},
-{"random",     math_random},
-{"randomseed", math_randomseed}
-};
-
-/*
-** Open math library
-*/
-void mathlib_open (void)
-{
-  luaL_openlib(mathlib, (sizeof(mathlib)/sizeof(mathlib[0])));
-  lua_pushcfunction(math_pow);
-  lua_pushnumber(0);  /* to get its tag */
-  lua_settagmethod(lua_tag(lua_pop()), "pow");
-}
-

+ 0 - 13
mathlib.h

@@ -1,13 +0,0 @@
-/*
-** Math library to LUA
-** TeCGraf - PUC-Rio
-** $Id: $
-*/
-
-
-#ifndef strlib_h
-
-void mathlib_open (void);
-
-#endif
-