特に非線形計算の精度保証を行うとき、template機能によって 複雑な数値型をすっきり記述でき、なおかつ "zero-overhead principle" で 計算速度が遅くならないC++は、非常に適していると言える (ほぼ唯一無二であると作者は考えている。)。
精度保証付き数値計算とkvライブラリの概要については、 このスライドを見て欲しい。 kv-intro.pdf (全86ページ)
2007年秋頃~2013年春頃の間は、区間演算を行うのにboostに含まれている intervalライブラリを用いて開発していたが、 boost.intervalは残念ながら不完全な部分が多く ライブラリ本体に手を入れざるを得なかった。 boost全体がアップデートする度にinterval部分にpatchを当てるのも面倒になって きたので、interval部分は全て自作することにした。 本ライブラリはboost.intervalは使っていないが、線形計算を行うboost.ublasなど、 部分的にまだboostを使っている。
boost.intervalを使っていた頃の古い情報はもうアップデートしないが、 一応 ここに保存しておく。
区間演算を実現するために丸めモードの変更を行っているので、 CPUとコンパイラには制限がある。 詳細は 5. 区間演算(interval) 、 20. 丸めモードの変え方とコンパイルオプション の項を参照。
一応、次の環境で動作を確認したことがあるが、主に開発は ubuntu 18.04 64bit + gccで行っており、その他は コンパイルが通るかチェックする程度である。
また、 https://github.com/mskashi/kv からもアクセスできる。
ヘッダファイルのみで動くように作られている。よって、ライブラリをmakeする 等のインストール作業は必要ない。 archiveを展開するとkv, test, exampleの3つのdirectoryが作られるが、 本体は kv 以下。kv以下をどこか (current directoryでも/usr/local/includeでも) に置いておくだけで良い。 動作確認は、kv及びboostがinclude pathに入った状態でtest以下または example以下の適当な.ccファイルをコンパイル出来ればOK。 例えば、
c++ -I.. -I/usr/local/include test-interval.ccとやってエラーが出なければ問題ない。 (「kv及びboost directoryが置いてあるdirectory」を指定することに注意)
コンパイルオプションは、-O3等で最適化を最大にし、 -DNDEBUGを付けることを推奨。 どちらも実行速度に大きく影響する。 (NDEBUGマクロの意味は boost.ublasの項を参照。)
([2015/12/17]に追加) 新しい環境やコンパイルオプションを使うときは、test/test-rounding.ccをコンパイル/実行して、 加減乗除と平方根で丸めの向きがちゃんと変わっているか簡易チェックするとよい。
kvライブラリが提供する機能は全てkv名前空間の中にあり、他のライブラリと ぶつからないように配慮されている。
大勢の人に使われて鍛えられないとライブラリは成長しないので、 なるべく多くの方に使って頂いてご意見を頂ければありがたいです。
本ライブラリの開発には、NTT未来ねっと研究所の柏木啓一郎氏の多大なる協力を 得ています。ここに感謝の意を表します。
Copyright (c) 2013-2019 Masahide Kashiwagi. このソフトウェアはMITライセンスに基づいて公開されています。