diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1999-02-19 15:33:35 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1999-02-19 15:33:35 -0200 |
commit | b5cd7d426fdfea4984234edc4ad1316063bd0917 (patch) | |
tree | d72068219da4d8923adf9de254c8cbcf473cbf95 | |
parent | bf6d2ccf92768be938aaac0a0bfc87833b793e8f (diff) | |
download | lua-b5cd7d426fdfea4984234edc4ad1316063bd0917.tar.gz lua-b5cd7d426fdfea4984234edc4ad1316063bd0917.tar.bz2 lua-b5cd7d426fdfea4984234edc4ad1316063bd0917.zip |
details
-rw-r--r-- | lmathlib.c | 88 |
1 files changed, 35 insertions, 53 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lmathlib.c,v 1.14 1998/12/30 21:23:26 roberto Exp $ | 2 | ** $Id: lmathlib.c,v 1.15 1999/01/04 12:41:12 roberto Exp roberto $ |
3 | ** Lua standard mathematical library | 3 | ** Lua standard mathematical library |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -14,108 +14,93 @@ | |||
14 | 14 | ||
15 | 15 | ||
16 | #define PI (3.14159265358979323846) | 16 | #define PI (3.14159265358979323846) |
17 | #define RADIANS_PER_DEGREE (PI/180.0) | ||
18 | |||
17 | 19 | ||
18 | 20 | ||
19 | /* | 21 | /* |
20 | ** If you want Lua to operate in radians (instead of degrees), | 22 | ** If you want Lua to operate in radians (instead of degrees), |
21 | ** changes these two macros to identities: | 23 | ** define RADIANS |
22 | ** #define FROMRAD(a) (a) | ||
23 | ** #define TORAD(a) (a) | ||
24 | */ | 24 | */ |
25 | #define FROMRAD(a) ((a)*(180.0/PI)) | 25 | #ifdef RADIANS |
26 | #define TORAD(a) ((a)*(PI/180.0)) | 26 | #define FROMRAD(a) (a) |
27 | #define TORAD(a) (a) | ||
28 | #else | ||
29 | #define FROMRAD(a) ((a)/RADIANS_PER_DEGREE) | ||
30 | #define TORAD(a) ((a)*RADIANS_PER_DEGREE) | ||
31 | #endif | ||
27 | 32 | ||
28 | 33 | ||
29 | static void math_abs (void) | 34 | static void math_abs (void) { |
30 | { | 35 | lua_pushnumber(fabs(luaL_check_number(1))); |
31 | double d = luaL_check_number(1); | ||
32 | if (d < 0) d = -d; | ||
33 | lua_pushnumber(d); | ||
34 | } | 36 | } |
35 | 37 | ||
36 | static void math_sin (void) | 38 | static void math_sin (void) { |
37 | { | ||
38 | lua_pushnumber(sin(TORAD(luaL_check_number(1)))); | 39 | lua_pushnumber(sin(TORAD(luaL_check_number(1)))); |
39 | } | 40 | } |
40 | 41 | ||
41 | static void math_cos (void) | 42 | static void math_cos (void) { |
42 | { | ||
43 | lua_pushnumber(cos(TORAD(luaL_check_number(1)))); | 43 | lua_pushnumber(cos(TORAD(luaL_check_number(1)))); |
44 | } | 44 | } |
45 | 45 | ||
46 | static void math_tan (void) | 46 | static void math_tan (void) { |
47 | { | ||
48 | lua_pushnumber(tan(TORAD(luaL_check_number(1)))); | 47 | lua_pushnumber(tan(TORAD(luaL_check_number(1)))); |
49 | } | 48 | } |
50 | 49 | ||
51 | static void math_asin (void) | 50 | static void math_asin (void) { |
52 | { | ||
53 | lua_pushnumber(FROMRAD(asin(luaL_check_number(1)))); | 51 | lua_pushnumber(FROMRAD(asin(luaL_check_number(1)))); |
54 | } | 52 | } |
55 | 53 | ||
56 | static void math_acos (void) | 54 | static void math_acos (void) { |
57 | { | ||
58 | lua_pushnumber(FROMRAD(acos(luaL_check_number(1)))); | 55 | lua_pushnumber(FROMRAD(acos(luaL_check_number(1)))); |
59 | } | 56 | } |
60 | 57 | ||
61 | static void math_atan (void) | 58 | static void math_atan (void) { |
62 | { | ||
63 | lua_pushnumber(FROMRAD(atan(luaL_check_number(1)))); | 59 | lua_pushnumber(FROMRAD(atan(luaL_check_number(1)))); |
64 | } | 60 | } |
65 | 61 | ||
66 | static void math_atan2 (void) | 62 | static void math_atan2 (void) { |
67 | { | ||
68 | lua_pushnumber(FROMRAD(atan2(luaL_check_number(1), luaL_check_number(2)))); | 63 | lua_pushnumber(FROMRAD(atan2(luaL_check_number(1), luaL_check_number(2)))); |
69 | } | 64 | } |
70 | 65 | ||
71 | static void math_ceil (void) | 66 | static void math_ceil (void) { |
72 | { | ||
73 | lua_pushnumber(ceil(luaL_check_number(1))); | 67 | lua_pushnumber(ceil(luaL_check_number(1))); |
74 | } | 68 | } |
75 | 69 | ||
76 | static void math_floor (void) | 70 | static void math_floor (void) { |
77 | { | ||
78 | lua_pushnumber(floor(luaL_check_number(1))); | 71 | lua_pushnumber(floor(luaL_check_number(1))); |
79 | } | 72 | } |
80 | 73 | ||
81 | static void math_mod (void) | 74 | static void math_mod (void) { |
82 | { | ||
83 | lua_pushnumber(fmod(luaL_check_number(1), luaL_check_number(2))); | 75 | lua_pushnumber(fmod(luaL_check_number(1), luaL_check_number(2))); |
84 | } | 76 | } |
85 | 77 | ||
86 | static void math_sqrt (void) | 78 | static void math_sqrt (void) { |
87 | { | ||
88 | lua_pushnumber(sqrt(luaL_check_number(1))); | 79 | lua_pushnumber(sqrt(luaL_check_number(1))); |
89 | } | 80 | } |
90 | 81 | ||
91 | static void math_pow (void) | 82 | static void math_pow (void) { |
92 | { | ||
93 | lua_pushnumber(pow(luaL_check_number(1), luaL_check_number(2))); | 83 | lua_pushnumber(pow(luaL_check_number(1), luaL_check_number(2))); |
94 | } | 84 | } |
95 | 85 | ||
96 | static void math_log (void) | 86 | static void math_log (void) { |
97 | { | ||
98 | lua_pushnumber(log(luaL_check_number(1))); | 87 | lua_pushnumber(log(luaL_check_number(1))); |
99 | } | 88 | } |
100 | 89 | ||
101 | static void math_log10 (void) | 90 | static void math_log10 (void) { |
102 | { | ||
103 | lua_pushnumber(log10(luaL_check_number(1))); | 91 | lua_pushnumber(log10(luaL_check_number(1))); |
104 | } | 92 | } |
105 | 93 | ||
106 | static void math_exp (void) | 94 | static void math_exp (void) { |
107 | { | ||
108 | lua_pushnumber(exp(luaL_check_number(1))); | 95 | lua_pushnumber(exp(luaL_check_number(1))); |
109 | } | 96 | } |
110 | 97 | ||
111 | static void math_deg (void) | 98 | static void math_deg (void) { |
112 | { | 99 | lua_pushnumber(luaL_check_number(1)/RADIANS_PER_DEGREE); |
113 | lua_pushnumber(luaL_check_number(1)*(180.0/PI)); | ||
114 | } | 100 | } |
115 | 101 | ||
116 | static void math_rad (void) | 102 | static void math_rad (void) { |
117 | { | 103 | lua_pushnumber(luaL_check_number(1)*RADIANS_PER_DEGREE); |
118 | lua_pushnumber(luaL_check_number(1)*(PI/180.0)); | ||
119 | } | 104 | } |
120 | 105 | ||
121 | static void math_frexp (void) { | 106 | static void math_frexp (void) { |
@@ -130,8 +115,7 @@ static void math_ldexp (void) { | |||
130 | 115 | ||
131 | 116 | ||
132 | 117 | ||
133 | static void math_min (void) | 118 | static void math_min (void) { |
134 | { | ||
135 | int i = 1; | 119 | int i = 1; |
136 | double dmin = luaL_check_number(i); | 120 | double dmin = luaL_check_number(i); |
137 | while (lua_getparam(++i) != LUA_NOOBJECT) { | 121 | while (lua_getparam(++i) != LUA_NOOBJECT) { |
@@ -143,8 +127,7 @@ static void math_min (void) | |||
143 | } | 127 | } |
144 | 128 | ||
145 | 129 | ||
146 | static void math_max (void) | 130 | static void math_max (void) { |
147 | { | ||
148 | int i = 1; | 131 | int i = 1; |
149 | double dmax = luaL_check_number(i); | 132 | double dmax = luaL_check_number(i); |
150 | while (lua_getparam(++i) != LUA_NOOBJECT) { | 133 | while (lua_getparam(++i) != LUA_NOOBJECT) { |
@@ -209,8 +192,7 @@ static struct luaL_reg mathlib[] = { | |||
209 | /* | 192 | /* |
210 | ** Open math library | 193 | ** Open math library |
211 | */ | 194 | */ |
212 | void lua_mathlibopen (void) | 195 | void lua_mathlibopen (void) { |
213 | { | ||
214 | luaL_openlib(mathlib, (sizeof(mathlib)/sizeof(mathlib[0]))); | 196 | luaL_openlib(mathlib, (sizeof(mathlib)/sizeof(mathlib[0]))); |
215 | lua_pushcfunction(math_pow); | 197 | lua_pushcfunction(math_pow); |
216 | lua_pushnumber(0); /* to get its tag */ | 198 | lua_pushnumber(0); /* to get its tag */ |