aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2016-05-13 04:38:09 +0200
committerMattias Andrée <maandree@kth.se>2016-05-13 04:38:09 +0200
commit16a001c8fe4e5ca99d5aafdd8ed02a35f09b6caa (patch)
treefe1116e5d8ce39e032c777003caa6d03ce667c78 /src
parentExponentiation: clarification of a mathematical expression (diff)
downloadlibzahl-16a001c8fe4e5ca99d5aafdd8ed02a35f09b6caa.tar.gz
libzahl-16a001c8fe4e5ca99d5aafdd8ed02a35f09b6caa.tar.bz2
libzahl-16a001c8fe4e5ca99d5aafdd8ed02a35f09b6caa.tar.xz
Miscellaneous stuff
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'src')
-rw-r--r--src/zmodmul.c1
-rw-r--r--src/zmodpow.c2
-rw-r--r--src/zmodpowu.c5
-rw-r--r--src/zpow.c2
-rw-r--r--src/zpowu.c5
5 files changed, 11 insertions, 4 deletions
diff --git a/src/zmodmul.c b/src/zmodmul.c
index 26d1178..5dd3a6c 100644
--- a/src/zmodmul.c
+++ b/src/zmodmul.c
@@ -6,6 +6,7 @@ void
zmodmul(z_t a, z_t b, z_t c, z_t d)
{
/* TODO Montgomery modular multiplication */
+ /* TODO Kochanski multiplication */
if (unlikely(a == d)) {
zset(libzahl_tmp_modmul, d);
zmul(a, b, c);
diff --git a/src/zmodpow.c b/src/zmodpow.c
index 0cec96d..253b3e4 100644
--- a/src/zmodpow.c
+++ b/src/zmodpow.c
@@ -12,6 +12,8 @@ zmodpow(z_t a, z_t b, z_t c, z_t d)
size_t i, j, n, bits;
zahl_char_t x;
+ /* TODO use zmodpowu when possible */
+
if (unlikely(zsignum(c) <= 0)) {
if (zzero(c)) {
if (check(zzero(b)))
diff --git a/src/zmodpowu.c b/src/zmodpowu.c
index 72aa96f..beb17c2 100644
--- a/src/zmodpowu.c
+++ b/src/zmodpowu.c
@@ -25,10 +25,11 @@ zmodpowu(z_t a, z_t b, unsigned long long int c, z_t d)
zmod(tb, b, d);
zset(td, d);
- zsetu(a, 1);
if (c & 1)
- zmodmul(a, a, tb, td);
+ zset(a, tb);
+ else
+ zsetu(a, 1);
while (c >>= 1) {
zmodsqr(tb, tb, td);
if (c & 1)
diff --git a/src/zpow.c b/src/zpow.c
index 29eea83..ecdadb2 100644
--- a/src/zpow.c
+++ b/src/zpow.c
@@ -14,6 +14,8 @@ zpow(z_t a, z_t b, z_t c)
* 7↑19 = 7↑10011₂ = 7↑2⁰ ⋅ 7↑2¹ ⋅ 7↑2⁴ where a↑2↑(n + 1) = (a↑2↑n)².
*/
+ /* TODO use zpowu when possible */
+
size_t i, j, n, bits;
zahl_char_t x;
int neg;
diff --git a/src/zpowu.c b/src/zpowu.c
index 35247c3..5a7676d 100644
--- a/src/zpowu.c
+++ b/src/zpowu.c
@@ -21,10 +21,11 @@ zpowu(z_t a, z_t b, unsigned long long int c)
neg = znegative(b) && (c & 1);
zabs(tb, b);
- zsetu(a, 1);
if (c & 1)
- zmul_ll(a, a, tb);
+ zset(a, tb);
+ else
+ zsetu(a, 1);
while (c >>= 1) {
zsqr_ll(tb, tb);
if (c & 1)