in codelab/pi.cc [130:156]
int main(int argc, char *argv[]) {
unsigned int prec = 100;
if (argc != 2) {
print_usage();
return 1;
}
const std::string_view arg(argv[1]);
auto [ptr, ec] = std::from_chars(arg.begin(), arg.end(), prec);
if (ptr != arg.end() && ec != std::errc()) {
print_usage();
return 1;
}
if (prec < PREC_MIN || PREC_MAX < prec) {
print_usage();
return 1;
}
const unsigned long prec_bits = prec * std::log2(10.) + PREC_EXTRA_BITS;
fmt::print(stderr, "Calculating {} digits of pi...\n", prec);
fmt::print(stderr, "Internal precision = {} bits\n", prec_bits);
auto pi = chudnovsky_pi(prec, prec_bits);
// Use MPFR to round to -inf.
mpfr_printf("%.*RDf\n", (mpfr_prec_t)prec, pi.ptr());
return 0;
}