gpt4 book ai didi

c++ - _controlfp_s 中的可能错误可能无法正确恢复控制字

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:20 25 4
gpt4 key购买 nike

我偶然发现了 _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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com