数式の評価を原始的に #17
Mpiに関わるデータの定義が桁数ndigitと各桁の値を格納する配列digitしかないことから分かるように、
Mpiの内容を初期化によって定められたものから変更する意図はない。
桁数が変わらないことが確定している操作ならば変更は簡単だが。
typedef struct { size_t ndigit; unsigned char *digit; } Mpi;
加算や乗算が、あるMpiに対して内容を再定義する操作ではなく、
初期化されていないMpiへの初期化操作にしているのもそのためである。
なので、使うのは結構面倒になる。例えば、
...snip int main(void) { Mpi a, b, c; char *s; mpi_init_with_decimal_expr(&a, "999999999999999999999999999999"); mpi_init_with_decimal_expr(&b, "9999999999999999999999999999999"); mpi_add(&a, &b, &c); s = mpi_make_decimal_expr(&c); printf("%s\n", s); free(s); mpi_fin(&c); mpi_mul(&a, &b, &c); s = mpi_make_decimal_expr(&c); printf("%s\n", s); free(s); mpi_fin(&c); mpi_fin(&a); mpi_fin(&b); return 0; }