2012-04-27 12 views
3

かなりの記事では、float-> integerを素早く変換するための命令をfistpで使用することをお勧めします。これはCPUの現在の丸めモードに依存するため、設定する必要があります。CPUの丸めモードはいつ変更できますか?

しかし、このラウンディングモードは、プログラムの実行中に他のプログラムによって変更される可能性がありますか? OSで?

さらに悪いことに、これは可能なシナリオ(擬似コード)ですか?

set_rounding_mode(ROUND_TRUNCATE); 
/* process gets switched out and other process sets the rounding mode to round */ 
int x = round_with_fistp(0.6); 
printf("%d\n", x); // prints 1 
+0

私は答えがノーだと思います。浮動小数点モードは、コンテキストスイッチを介して保存する必要がある多くの要素の1つです。 – Mysticial

答えて

5

sane汎用OSは、プロセスとスレッド間で丸めモードを共有しません。それは、スレッドがスレッドを要求したときに変更する必要があり、変更はそのスレッドのみに対してローカルでなければなりません。しかし、一部のライブラリ(特にサードパーティ)がそれを変更したり、時には(または常に)それを復元できず、回避策を実装することがあります。

関連する問題