kokke / tiny-bignum-c

Small portable multiple-precision unsigned integer arithmetic in C
The Unlicense
424 stars 85 forks source link

Added add and multiply inline operations #15

Open bkrogh opened 4 years ago

bkrogh commented 4 years ago

I have a case, which I consider fairly common: Multiply or add a number smaller than WORD_SIZE bytes, to a given bignum (myBigNum in below example).

The library currently supports this by doing something like this: int k = 1234; struct bn tmp; bignum_from_int(&tmp, k);

struct bn intermediate; bignum_mul(&tmp, &myBigNum, &intermediate); bignum_assign(&myBigNum, &intermediate);

The multiply operation is quite expensive because of internal O(n^3) implementation. When doing a large number of these operations it will dominate the execution time.

My proposal here is to add two simple inline operations that multiply with a DTYPE integer. These are much faster than regular add/mul, and a bit more convenient in usage. The above code becomes: bignum_mul_int(&myBigNum, k);