- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我偶然发现了 _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 :
If the value for mask is equal to 0, _controlfp_s gets the floating-point control word. If mask is nonzero, a new value for the control word is set: For any bit that is on (equal to 1) in mask, the corresponding bit in new is used to update the control word. In other words, fpcntrl = ((fpcntrl & ~mask) | (new & mask)) where fpcntrl is the floating-point control word.
(强调我的)因此,可靠地存储当前控制字的方法是您编写的第二种方法(您已经发现有效的方法)。如果您要修改控制字,则不会为掩码传递 0,并且根据函数文档,它不会检索当前控制字。
关于c++ - _controlfp_s 中的可能错误可能无法正确恢复控制字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/637175/
我偶然发现了 _controlfp_s (Visual Studio 2008) 的问题,或者我对它的理解。我认为第一个输出参数在应用其他参数的更改之前返回了控制标志。似乎它在更改后返回标志。 所以,
我正在 Windows(在本例中为 Windows 8.1)上编译一个 MinGW 程序,并且我希望获得引发浮点错误的信号。出于某种原因,我必须使用 _controlfp_s 来启用这些信号(其他信号
我是一名优秀的程序员,十分优秀!