From c9ba2d4bb1882b781ce74352a57e0df1ad1fd870 Mon Sep 17 00:00:00 2001 From: Enyby Date: Sun, 23 Dec 2018 17:48:31 +0200 Subject: [PATCH] Fix math.modf for inf/-inf and int values. --- src/core/org/luaj/vm2/lib/MathLib.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/core/org/luaj/vm2/lib/MathLib.java b/src/core/org/luaj/vm2/lib/MathLib.java index 6b288875..29f2022a 100644 --- a/src/core/org/luaj/vm2/lib/MathLib.java +++ b/src/core/org/luaj/vm2/lib/MathLib.java @@ -212,9 +212,14 @@ public class MathLib extends TwoArgFunction { static class modf extends VarArgFunction { public Varargs invoke(Varargs args) { - double x = args.checkdouble(1); + LuaValue n = args.arg1(); + /* number is its own integer part, no fractional part */ + if (n.islong()) return varargsOf(n, valueOf(0.0)); + double x = n.checkdouble(); + /* integer part (rounds toward zero) */ double intPart = ( x > 0 ) ? Math.floor( x ) : Math.ceil( x ); - double fracPart = x - intPart; + /* fractional part (test needed for inf/-inf) */ + double fracPart = x == intPart ? 0.0 : x - intPart; return varargsOf( valueOf(intPart), valueOf(fracPart) ); } }