ぺんぎんさんのおうち

日記です。たまに日記じゃないこともあります。

GMP

23.02.2024

牡蠣食って帰ってきて、元気だったら修正する。 C++ならスマートポインタ使えよ←やめてね double型よりも精度が良くて、配列の要素ごとに計算できるモジュールが欲しい。要するにnumpy.array(dtype=float)に勝ちたい。 自力で実装しても絶対勝てないのでGMP…

15.02.2024

mpf_class a("0.1")とmpf_class b = 0.1は違うんだなぁ。コンストラクタで呼び出す関数がそれぞれmpf_init_set_strとmpf_set_dなので違うのは当たり前なんだが、そうじゃない。 #include <iostream> #include <gmpxx.h> void dump_mpf_member(mpf_t t) { printf("Prec : %lu\n",</gmpxx.h></iostream>…

14.02.2024

はてなブログのUI変わったね。エントリを見る側からすると今のUIがカッコよくていいけど、書く側的には前のほうが好き(In my opnion)。 mpf_関数はmpf_t同士かmpf_tと整数の加減乗除しかない(mpq_t, mpz_tは考慮しない)。double型の場合はどうするか。mpf_…

GNU MP ver6.3のRelease Notes

GMP

GNU MPの最新版ver6.3が7月末に公開されてた。ver6.2.1が公開されたのが2020年11月なので約2年半ぶり。 gmplib.org Release Notes(6.2.xと6.3との違い)にコメントしていきますね。 BUGS FIXED A possible overflow of type int is avoided for mpz_cmp on …

有理数の加減算に関すること

ykm11.hatenablog.com に関係する話。 前提として、\(\frac{a}{b}, \frac{c}{d} \)は既約分数である。 つまり\(GCD(a, b) = GCD(c, d) = 1 \)。(GCD(X,Y)はXとYの最大公約数) prop. 上の前提の元、\(GCD(b, d) = 1\) ならば\(GCD(ad + bc, bd) = 1\)である…

mpq_tの加算、減算

GMP

GMPの有理数mpq_tの加減算を,実装を読みながら理解する. 加算も減算も本質的には同じなので、ここでは単に加算と呼ぶ。 op1が\(\frac{a}{b}\), op2が\(\frac{c}{d}\)で表され, それぞれ既約分数であるとする. これらの和\(op1 + op2 = \frac{ad + bc}{bd}…

mpq_tの乗算

GMP

GMPの有理数mpq_tの乗算を,実装を読みながら理解する. op1が\(\frac{a}{b}\), op2が\(\frac{c}{d}\)で表され,既約分数であるとする. これらの積\(op1 \cdot op2 = \frac{ac}{bd}\)が既約分数であるとは限らないので,計算結果をいい感じに既約分数で表し…

GMP mpn_zeroの実装

mp_limb_t[CONST_SIZE]をゼロ埋め(初期化)するとき、mpn_zeroを使う方法とmemsetを使う方法があった。また、どちらの方法においても、初期化するサイズを定数とするか変数とするかで場合分けができる。 速度比較を行った結果、サイズを定数としてmemsetを…

スマプリは黄色が一番かわいい

GMP

実話です UEC Advent Calendar2020 5日目の記事です. 前:消しゴムにだって命はある - uec19bのブログ 次:KVMとヤマハルータでタグVLAN いつもなら最初に時候の挨拶や前置きをつらつらと書くんですが,今年は時間があまり取れないので割愛します.いい感じ…

GMP6.2.1で修正されたmpz_cmpのバグ

GMP

2020/11/14 GMPがver6.2.1にアップデートされた. いくつかバグが修正されたのだが,その中にmpz_cmpが含まれていた. Release noteによると A possible overflow of type int is avoided for mpz_cmp on huge operands. とのこと.大きな値をmpz_cmpに渡す…

mpz_t, mpz_class メモ2

GMP v6.2 https://gmplib.org/ 実話です. 前 https://ykm11.hatenablog.com/entry/2020/05/13/011804 次 今回はGMPの実装をみながら解説. /* gmp.h */ typedef struct { int _mp_alloc; int _mp_size; mp_limb_t *_mp_d;} __mpz_struct; typedef __mpz_str…

mpz_t, mpz_classのメモ

メモなのでかなり適当.HackMDに書けばよかった. x86_64で動かすときの話. mpz_classはmpz_tのwrapperで,演算子オーバーライドしてあるからプリミティブ型みたいに記述できるんだけど,一次変数のために無駄なメモリ確保が起きる可能性がある(いい感じに…