Sat, 21 Sep 2013 14:31:22 +0100
Fix math.frexp() and add more tests (thanks Florob, Link Mauve, xnyhps)
lvm.js | file | annotate | diff | comparison | revisions | |
tests/pass/frexp.lua | file | annotate | diff | comparison | revisions |
--- a/lvm.js Sat Sep 21 14:02:16 2013 +0100 +++ b/lvm.js Sat Sep 21 14:31:22 2013 +0100 @@ -850,10 +850,16 @@ { var m = x.value; var e = 0; - while (Math.abs(m) >= 1) { - m = m / 2; - e = e + 1; - }; + if(m != 0) { + while (Math.abs(m) < 0.5) { + m = m * 2; + e = e - 1; + } + while (Math.abs(m) >= 1) { + m = m / 2; + e = e + 1; + } + } return [this.LValue(m), this.LValue(e)]; }, floor: function (x)
--- a/tests/pass/frexp.lua Sat Sep 21 14:02:16 2013 +0100 +++ b/tests/pass/frexp.lua Sat Sep 21 14:31:22 2013 +0100 @@ -8,4 +8,10 @@ assert(m == 0.75 and e == 2, "frexp(3)"); local m, e = math.frexp(-1); -assert(m == -0.5 and e == 1, "frexp(1)"); +assert(m == -0.5 and e == 1, "frexp(-1)"); + +local m, e = math.frexp(0.5); +assert(m == 0.5 and e == 0, "frexp(0.5)"); + +local m, e = math.frexp(0.1); +assert(m == 0.8 and e == -3, "frexp(0.1)");