数式の評価を原始的に #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;
}