shithub: mc

Download patch

ref: c57f69776103121107ad70d86a7b0efbc2553daa
parent: bc7b9cf7c49595c758d68c30ee1179740e269121
author: S. Gilles <sgilles@math.umd.edu>
date: Thu Jun 28 06:37:51 EDT 2018

Add macros for relative error to lib/math/ancillary.

--- /dev/null
+++ b/lib/math/ancillary/ulp.gp
@@ -1,0 +1,27 @@
+/*
+  I always end up need this for debugging
+ */
+
+{ ulp32(a) = my(aa, q);
+        aa = abs(a);
+        if(aa < 2^(-150),return(2^(-126 - 23)),);
+        q = floor(log(aa)/log(2));
+        if(q < -126,q=-126,);
+        return(2^(q-23));
+}
+
+{ ulp64(a) = my(aa, q);
+        aa = abs(a);
+        if(aa < 2^(-2000),return(2^(-1022 - 52)),);
+        q = floor(log(aa)/log(2));
+        if(q < -1022,q=-1022,);
+        return(2^(q-52));
+}
+
+{ err32(x, y) =
+        return(abs(x-y)/ulp32(x));
+}
+
+{ err64(x, y) =
+        return(abs(x-y)/ulp64(x));
+}