GMP/MPFR

100以下の素数

N = 100以下の素数をリストアップする。 #include <gmp.h> int main(void) { unsigned int N = 100UL; mpz_t p; mpz_init_set_ui(p, 2UL); do { gmp_printf("%Zd ", p); mpz_nextprime(p, p); } while (mpz_cmp_ui(p, N) <= 0); gmp_printf("\n"); mpz_clear(p); re</gmp.h>…

演算子の多重定義こわい

パスタコードとか無秩序とかが好きなので、 構造化とかオブジェクトとか言われると、何それ美味しいの? だ。 #include <iostream> #include <iomanip> #include <gmpxx.h> int main() { mpf_t f; mpf_init2(f, 200); mpf_set_ui(f, 29); mpf_class x = 29, y(29, 200), z(1 / y), w(f); </gmpxx.h></iomanip></iostream>…

MPFRを使って逆数を求める

MPFRはGMPのmpf_t型に関する計算を含む形で拡張されているので、 GMPだけで閉じたいとかでないようなら、 MPFRを使うことも検討した方がいいかもしれない。 でもこの場合はやりたければ簡単に計算の丸めを制御できるくらいで、 あまりMPFRにする意味はないか…

もう少しシンプルにmpf_t型で

前述のコードはmpf_t型同士の除算の説明のためだったので、 単にmpf_t型で29の逆数を必要な精度で求めるだけなら、 #include <gmp.h> int main(void) { mpf_t c; mpf_init2(c, 200); mpf_set_ui(c, 29); mpf_ui_div(c, 1, c); gmp_printf("%.60Ff\n", c); mpf_clear</gmp.h>…

gmpで除算でmpfで

こういう検索語群もあったのだが、あれ? GMPを使ったコードについて言及した記憶はあるけれど、 それは整数型mpz_tに関するものであって、 浮動小数点数型mpf_tを使ったコードについて書いたことあったかな? と思って記事のローカルバックアップ、というか…