commit b945fae40e270c8085ccdd8485bb01121f0a8406
parent dadba4d6ed9f7432185816abcbb788125aa991ff
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Tue, 16 Sep 1997 16:25:38 -0300
Lua standard mathematical library
Diffstat:
A | lmathlib.c | | | 195 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
D | mathlib.c | | | 221 | ------------------------------------------------------------------------------- |
D | mathlib.h | | | 13 | ------------- |
3 files changed, 195 insertions(+), 234 deletions(-)
diff --git a/lmathlib.c b/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");
+}
+
diff --git a/mathlib.c b/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");
-}
-
diff --git a/mathlib.h b/mathlib.h
@@ -1,13 +0,0 @@
-/*
-** Math library to LUA
-** TeCGraf - PUC-Rio
-** $Id: $
-*/
-
-
-#ifndef strlib_h
-
-void mathlib_open (void);
-
-#endif
-