kvライブラリを0.4.8にupdateしました。
newton.hppをちょっと直した、mpfrのラッパーを書いた、ODEの初期値問題の使い方を詳細に書いた、くらいが主な変更です。
ODEの初期値問題はいろいろな解法を試したかったせいで多数のプログラムを作成しており、自分でも思い出しながら使い方を書くのは大変でした。初期値問題のみで、それを使った境界値問題や周期解の問題に対するshooting methodの話はまだです。これらも早く書きたい。
また、MPFRの簡単なラッパーを書き、interval型の両端の数として使えるように整えて、double, dd以外の第3の選択肢を提供しました。以前boost.intervalにmpfrcppを組み合わせて出来ていたことが出来なくなっていたので、早く書きたいと思っていたライブラリの一つです。ラッパーそのものはほぼ一日で書き上がりました。
重めの全解探索問題 (example/test-nishi.cc の5つの解を持つ非線形回路方程式) でベンチマークを取ってみました。
5.96sec (double, -DKV_FASTROUND -DNDEBUG -O3)
29.9sec (dd, -DKV_FASTROUND -DNDEBUG -O3)
326sec (mpfr<53>, -DNDEBUG -O3)
415sec (mpfr<106>, -DNDEBUG -O3)
これを見ると、53bit (doubleと同じ) や106bit (ddと同じ) くらいの精度では遅すぎてMPFRを使う意味はなさそうです。106bitよりも更に高精度が必要な問題に対して仕方なく使うような感じでしょうか。