4

在相当多的文章中,他们建议使用fistp指令快速转换 float->integer。这取决于 CPU 的当前舍入模式,因此您必须设置它。

但是这种舍入模式可以在程序运行期间被其他程序改变吗?通过操作系统?

更糟糕的是,这是一种可能的情况(伪代码)吗?

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
4

1 回答 1

6

没有一个理智的通用操作系统会在进程和线程之间共享舍入模式。它只应在线程请求它时更改,并且更改应仅对该线程本地。但是,您可能会遇到某些库(尤其是第 3 方)更改它,有时(或总是)无法恢复它并迫使您实施变通方法。

于 2012-04-27T01:01:23.767 回答