2013/11/04(月)丸めモードの変更
丸めモードの変更に関しては気を付けなければいけないポイントが大変多く、講義なんかするときにもすぐに忘れそうになるので、IntelのCPUに関してまとめた資料を作ったので、ここにアップしておく。
roundingmode.pdf
なお、kvライブラリにおいては、この資料の7章にあるようにコンパイラに備わっているfesetroundまたは_controlfpを用いており、最速というわけではない。が、Intel以外のCPUを含む割と多くの環境で安定して動くというメリットもある。
IntelのCPUで64bitモードの場合に限って、KV_FASTROUNDというマクロを定義すると、Intrinsicを用い、プログラム起動時に予めレジスタ値を計算し丸め変更時には書き込むだけという速くなりそうな方法を使うようになる。FPUは使わないと仮定してSSE2の丸めモードしか変更しないし、MXCSRレジスタの丸めモード以外の部分の値を全くケアしないので、そのことによる副作用をよく理解した上で使う必要がある。
なお、プログラミング言語や環境によっては丸めモードの変更をしづらいこともあり、丸めモードの変更を行わずに精度保証する方法の研究も進んでいることを付記しておく。