aboutsummaryrefslogtreecommitdiffstats
path: root/src/zsqr.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2016-03-04 23:50:00 +0100
committerMattias Andrée <maandree@kth.se>2016-03-04 23:50:00 +0100
commit76d0af5599554d11f104d582cdac8fbaa8569fcc (patch)
tree0ed9889a86d52ebd208382f2fd49dad0570d1f8c /src/zsqr.c
parentClean up, fix a few bugs, and add a test (diff)
downloadlibzahl-76d0af5599554d11f104d582cdac8fbaa8569fcc.tar.gz
libzahl-76d0af5599554d11f104d582cdac8fbaa8569fcc.tar.bz2
libzahl-76d0af5599554d11f104d582cdac8fbaa8569fcc.tar.xz
Clean up, add zerror and zperror, fix bugs and add more tests
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to '')
-rw-r--r--src/zsqr.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/zsqr.c b/src/zsqr.c
index a9cebd0..39f5591 100644
--- a/src/zsqr.c
+++ b/src/zsqr.c
@@ -21,7 +21,11 @@ zsqr(z_t a, z_t b)
m2 = zbits(b);
if (m2 <= BITS_PER_CHAR / 2) {
- zsetu(a, b->chars[0] * b->chars[0]);
+ /* zsetu(a, b->chars[0] * b->chars[0]); { */
+ ENSURE_SIZE(a, 1);
+ a->used = 1;
+ a->chars[0] = b->chars[0] * b->chars[0];
+ /* } */
SET_SIGNUM(a, 1);
return;
}
@@ -38,14 +42,14 @@ zsqr(z_t a, z_t b)
zsplit(high, low, b, m2);
-#if 0
+#if 1
zsqr(z0, low);
zsqr(z2, high);
zmul(z1, low, high);
+ zlsh(z1, z1, m2 + 1);
+ m2 <<= 1;
zlsh(z2, z2, m2);
- m2 = (m2 << 1) | 1;
- zlsh(z1, z1, m2);
zadd(a, z2, z1);
zadd(a, a, z0);