private static int frexp(LuaCallFrame callFrame, int nArguments) {
        BaseLib.luaAssert(nArguments >= 1, "Not enough arguments");
        double x = getDoubleArg(callFrame,1,names[FREXP]);

        double e, m;
        if (Double.isInfinite(x) || Double.isNaN(x)) {
            e = 0;
            m = x;
        } else {
            e = Math.ceil(ln(x) * LN2_INV);
            int div = 1 << ((int) e);
            m = x / div;
        }
        callFrame.push(LuaState.toDouble(m), LuaState.toDouble(e));
        return 2;
    }
Rounds to keep <em>precision</em> decimals. Rounds towards even numbers.
@param x the number to round
@param precision the precision to round to. A precision of 3 will for instance round 1.65432 to 1.654
@return the rounded number
main/src/main/java/cgeo/geocaching/wherigo/kahlua/stdlib/MathLib.java