2016-04-19 21 views
2

私はRustで区間演算を行いたいので、丸めモードを上または下に設定する必要があります。いくつかの検索からわかるように、丸めモードを設定するとパフォーマンスに影響するため、コンパイル時に設定したいと思うでしょう。コンパイル時にRustで浮動小数点丸めモードを設定できますか?

+0

あなたが知っていれば、私たちとあなたの知識を共有してください。 –

+0

http://www.gnu.org/software/libc/manual/html_node/Rounding.htmlが役立ちます。 gccのCおよびC++の実装にはおそらく適用されます。 RustやClangがC/C++をどのように実装しているかについての手掛かりはありません。最後のコメントと「最も近いものへの丸め」のコメントに注意してください。 – thurizas

+2

関連:http://stackoverflow.com/questions/28121957/how-do-i-specify-the-rounding-mode-for-floating-point-numbers – Veedrac

答えて

3

信頼性の高い、問題はLLVMバックエンドが丸めモードの変更をサポートしていないことです。最近はsome proposals to fix thisがありますが、近い将来解決される可能性は低いです。

プログラム開始時にC fesetround関数(fenv.h)を呼び出すことができますが、既定の丸めモードを使用して一定の最適化(定数の折り畳みなど)が行われていることが問題です。

+0

ok。私はおそらく、もし私がそのような最適化を可能にし、あるインラインアセンブリを使って丸めを変えることができれば、私が望むバーハイを得ることができます。 –

+0

私はアセンブリを使うのではなく 'fesetround'を呼び出します。x86では、SSE操作のMXCSRとx87操作のFPSCRの2つの異なるレジスタが実際に存在します。 –

+0

はい、私は2つのレジスタを変更する必要がありますが、今私はこの[投稿]で扱う別の問題に直面しています(http://stackoverflow.com/questions/36789681/which-llvm-passes-are-responsible-for浮遊点最適化) –

関連する問題