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