数式の評価を原始的に #14
任意長非負整数から10進数表記の文字列表現を得る関数も。
基本的な骨格は10->256変換も256->10変換も変わりない。
...snip char *mpi_make_decimal_expr(Mpi *mpi); ...snip char *mpi_make_decimal_expr(Mpi *mpi) { char *expr = malloc((size_t)(2.4082399654 * mpi->ndigit) + 1 + 1); size_t nexpr = 1, m = mpi->ndigit - 1, n; expr[0] = 0; do { unsigned int c = mpi->digit[m]; size_t n = 0; do { c += expr[n] << 8; expr[n] = c % 10; c /= 10; n++; } while (n < nexpr); while (c > 0) { expr[n] = c % 10; c /= 10; n++; } nexpr = n; } while (m-- > 0); for (n = 0; n < nexpr / 2; n++) { size_t p = nexpr - n - 1, t = expr[n] + '0'; expr[n] = expr[p] + '0'; expr[p] = t; } if ((nexpr & 1) != 0) expr[nexpr / 2] += '0'; expr[nexpr] = '\0'; return expr; }