数式の評価を原始的に #16
乗算を行う関数も。
特に工夫もなく素朴に実装。
...snip void mpi_mul(Mpi *a, Mpi *b, Mpi*c); ...snip void mpi_mul(Mpi *a, Mpi *b, Mpi*c) { size_t i, j, n; unsigned int carry; n = a->ndigit + b->ndigit; c->digit = malloc(n); for (i = 0; i < n; i++) c->digit[i] = 0; for (i = 0; i < a->ndigit; i++) { unsigned int ad = a->digit[i]; for (j = 0, carry = 0; j < b->ndigit; j++) { unsigned int p = ad * b->digit[j] + carry + c->digit[i + j]; c->digit[i + j] = p & (256 - 1); carry = p >> 8; } if (carry != 0) { c->digit[i + j] = carry; c->ndigit = i + j + 1; } else { c->ndigit = i + j; } } }