From 32dcbaca3a001558004b1e34cfec1b55c7f36730 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Wed, 1 Aug 2007 04:57:12 +0000 Subject: [PATCH] Make modulo arithmetic conform to lua rules for negative values. --- src/main/java/lua/value/LDouble.java | 3 ++- src/main/java/lua/value/LInteger.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/lua/value/LDouble.java b/src/main/java/lua/value/LDouble.java index 33c77ce9..ea84598a 100644 --- a/src/main/java/lua/value/LDouble.java +++ b/src/main/java/lua/value/LDouble.java @@ -39,7 +39,8 @@ public class LDouble extends LNumber { case Lua.OP_SUB: return new LDouble( lhs - rhs ); case Lua.OP_MUL: return new LDouble( lhs * rhs ); case Lua.OP_DIV: return new LDouble( lhs / rhs ); - case Lua.OP_MOD: return new LDouble( lhs % rhs ); + case Lua.OP_MOD: return new LDouble( lhs - Math.floor(lhs/rhs) * rhs ); + // case Lua.OP_POW: return new LDouble( Math.pow(lhs, rhs) ); } return luaUnsupportedOperation(); diff --git a/src/main/java/lua/value/LInteger.java b/src/main/java/lua/value/LInteger.java index 51b799ff..b46c91d3 100644 --- a/src/main/java/lua/value/LInteger.java +++ b/src/main/java/lua/value/LInteger.java @@ -34,7 +34,7 @@ public class LInteger extends LNumber { case Lua.OP_SUB: return new LInteger( m_value - rhs ); case Lua.OP_MUL: return new LInteger( m_value * rhs ); case Lua.OP_DIV: return new LInteger( m_value / rhs ); - case Lua.OP_MOD: return new LInteger( m_value % rhs ); + case Lua.OP_MOD: return new LInteger( m_value - ((int) Math.floor(m_value/(double)rhs)) * rhs ); // case Lua.OP_POW: return new LInteger( (int) Math.pow(m_value, rhs) ); } return luaUnsupportedOperation();