1
0
mirror of https://github.com/lua/lua.git synced 2025-01-28 06:03:00 +08:00

new definition for 'luai_nummod' (using 'fmod')

This commit is contained in:
Roberto Ierusalimschy 2014-04-09 14:05:11 -03:00
parent c7859a046d
commit a8aede68c7
3 changed files with 13 additions and 6 deletions

View File

@ -1,5 +1,5 @@
/* /*
** $Id: lobject.c,v 2.75 2014/03/06 16:15:18 roberto Exp roberto $ ** $Id: lobject.c,v 2.76 2014/03/21 13:52:33 roberto Exp roberto $
** Some generic functions over Lua objects ** Some generic functions over Lua objects
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@ -98,9 +98,13 @@ static lua_Number numarith (lua_State *L, int op, lua_Number v1,
case LUA_OPSUB: return luai_numsub(L, v1, v2); case LUA_OPSUB: return luai_numsub(L, v1, v2);
case LUA_OPMUL: return luai_nummul(L, v1, v2); case LUA_OPMUL: return luai_nummul(L, v1, v2);
case LUA_OPDIV: return luai_numdiv(L, v1, v2); case LUA_OPDIV: return luai_numdiv(L, v1, v2);
case LUA_OPMOD: return luai_nummod(L, v1, v2);
case LUA_OPPOW: return luai_numpow(L, v1, v2); case LUA_OPPOW: return luai_numpow(L, v1, v2);
case LUA_OPUNM: return luai_numunm(L, v1); case LUA_OPUNM: return luai_numunm(L, v1);
case LUA_OPMOD: {
lua_Number m;
luai_nummod(L, v1, v2, m);
return m;
}
default: lua_assert(0); return 0; default: lua_assert(0); return 0;
} }
} }

View File

@ -1,5 +1,5 @@
/* /*
** $Id: luaconf.h,v 1.193 2014/03/21 14:27:16 roberto Exp roberto $ ** $Id: luaconf.h,v 1.194 2014/04/03 14:18:02 roberto Exp $
** Configuration file for Lua ** Configuration file for Lua
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@ -497,7 +497,8 @@
/* the following operations need the math library */ /* the following operations need the math library */
#if defined(lobject_c) || defined(lvm_c) #if defined(lobject_c) || defined(lvm_c)
#include <math.h> #include <math.h>
#define luai_nummod(L,a,b) ((void)L, (a) - l_floor((a)/(b))*(b)) #define luai_nummod(L,a,b,m) \
{ (m) = l_mathop(fmod)(a,b); if ((m) != 0 && (a)*(b) < 0) (m) += (b); }
#define luai_numpow(L,a,b) ((void)L, l_mathop(pow)(a,b)) #define luai_numpow(L,a,b) ((void)L, l_mathop(pow)(a,b))
#endif #endif

6
lvm.c
View File

@ -1,5 +1,5 @@
/* /*
** $Id: lvm.c,v 2.193 2014/04/02 16:54:20 roberto Exp roberto $ ** $Id: lvm.c,v 2.194 2014/04/08 14:28:04 roberto Exp roberto $
** Lua virtual machine ** Lua virtual machine
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@ -755,7 +755,9 @@ void luaV_execute (lua_State *L) {
setivalue(ra, luaV_mod(L, ib, ic)); setivalue(ra, luaV_mod(L, ib, ic));
} }
else if (tonumber(rb, &nb) && tonumber(rc, &nc)) { else if (tonumber(rb, &nb) && tonumber(rc, &nc)) {
setnvalue(ra, luai_nummod(L, nb, nc)); lua_Number m;
luai_nummod(L, nb, nc, m);
setnvalue(ra, m);
} }
else { Protect(luaT_trybinTM(L, rb, rc, ra, TM_MOD)); } else { Protect(luaT_trybinTM(L, rb, rc, ra, TM_MOD)); }
) )