Fix math.frexp() and add more tests (thanks Florob, Link Mauve, xnyhps) default tip

Sat, 21 Sep 2013 14:31:22 +0100

author
Matthew Wild <mwild1@gmail.com>
date
Sat, 21 Sep 2013 14:31:22 +0100
changeset 143
a689e0187ef5
parent 142
574e0baea136

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)");

mercurial