我偶然发现_controlfp_s(Visual Studio 2008)的问题,或者对它的理解。我认为在应用其他参数更改之前,先出参数会返回控制标志。似乎它在更改后返回标志。

因此,我认为正确的使用方式如下:

// Chop rounding
unsigned int old;
_controlfp_s(&old, _RC_CHOP, _MCW_RC);

// Do chopped math


// Restore
unsigned int unused;
_controlfp_s(&unused, old, _MCW_RC);

不幸的是,我需要这样做:
// Save
unsigned int old1;
_controlfp_s(&old1, 0, 0);

// Chop rounding
unsigned int old2;
_controlfp_s(&old2, _RC_CHOP, _MCW_RC);

// Do chopped math


// Restore
unsigned int unused;
_controlfp_s(&unused, old1, _MCW_RC);

我错过了什么吗?似乎很愚蠢,不得不这样做。

顺便说一句:我已将此报告给MS,MS表示他们听不懂,并建议我提供一段显示问题的视频。是的,对。

布拉德

最佳答案

根据MSDN:



(强调我的)
因此,可靠地存储当前控制字的方法是您编写的第二种方法(您已经找到了有效的方法)。如果要修改控制字,则不会为掩码传递0,并且根据功能文档,它不会检索当前控制字。

07-24 09:44
查看更多