2013/11/04(月)丸めモードの変更
丸めモードの変更に関しては気を付けなければいけないポイントが大変多く、講義なんかするときにもすぐに忘れそうになるので、IntelのCPUに関してまとめた資料を作ったので、ここにアップしておく。
roundingmode.pdf
なお、kvライブラリにおいては、この資料の7章にあるようにコンパイラに備わっているfesetroundまたは_controlfpを用いており、最速というわけではない。が、Intel以外のCPUを含む割と多くの環境で安定して動くというメリットもある。
IntelのCPUで64bitモードの場合に限って、KV_FASTROUNDというマクロを定義すると、Intrinsicを用い、プログラム起動時に予めレジスタ値を計算し丸め変更時には書き込むだけという速くなりそうな方法を使うようになる。FPUは使わないと仮定してSSE2の丸めモードしか変更しないし、MXCSRレジスタの丸めモード以外の部分の値を全くケアしないので、そのことによる副作用をよく理解した上で使う必要がある。
なお、プログラミング言語や環境によっては丸めモードの変更をしづらいこともあり、丸めモードの変更を行わずに精度保証する方法の研究も進んでいることを付記しておく。
2013/10/30(水)kv-0.3 & 今後やりたいこと
ライブラリ本体はpsa.hppの細かいbug fix程度であまり大きく変わってはいないが、
ドキュメントを区間演算、問題の記述方法を中心にいくらか加筆した。
このライブラリで要するに何が出来るのか、というデモとして、
web上で精度保証出来るような何かを作りたいという気がしている。しかし、現状では
問題を変える度に再コンパイルする必要がある。という大きな問題点がある。式中の定数が変わったくらいならその必要はないが、
全く違う問題なら再コンパイルする必要があり、またテンプレートを多用している
せいで分割コンパイルできずコンパイルが非常に遅い。
このままだと、「解は0.1秒で精度保証できるがコンパイルに3秒」みたいになってしまい
それはかっこ悪い。
webで文字列として受け取った問題をparseして中間言語にコンパイルし、それを
高速に処理するような仕組みを作りたいが、めんどいなあ。
こういうのは手間がかかる割に研究業績にならないしなあ。
2013/09/30(月)kv-0.2
Visual Studio 2010のIDEを使っていると動かないという情報が入る。
試してみると確かに動かない。expで落ちる。文字列からdoubleへの変換の問題?
探ってみると、stringtod, stringtoddでのstd::stringの扱い方に
問題があり、indexが正しい範囲から外れることがある模様。
linuxやVC++のコマンドラインでは動いてしまうので気付かなかった。
大変かっこ悪いバグなので、0.2としてversion upすることにした。
ついでに、
- conv-double.hpp (stringtod, dtostring)
- conv-dd.hpp (stringtodd, ddtostring)
これらは、doubleまたはddと文字列との相互変換を丸めの方向指定付きで
行うもので、単体でも役に立つのではないかと思っている。
1.0までに完成度が上がりドキュメントも整備できるといいなあ。
2013/09/27(金)kvのドキュメントをちょっと加筆
先は長い。
あと、この日記cgiにTeX記法を導入してみた。
ちゃんと書けてるのかな。
2013/09/18(水)verifiedby.me開設 & kv-0.1 アップロード
いつか公開しようと考えていて、ついに勢いで公開した。
ついでにverifiedby.meドメイン取って、日記を開設して、と大忙し。
ライブラリの完成度はそこそこ上がってきたと思っているが、
testやexampleは限りなく未整備。更にwebのドキュメントはひどい。
しかし、完璧になってからなんて考えてたらいつまで経っても公開できないので、
思い切って公開してみることにした。
C++そのものの敷居が高いので、もう少しドキュメントを整備しないと
自分以外の人は使えないだろうなあ。もう少し頑張ろう。