C++ 忽略C+中的浮点溢出和下溢错误+;

C++ 忽略C+中的浮点溢出和下溢错误+;,c++,visual-c++,floating-point,C++,Visual C++,Floating Point,下面的代码片段 void main() { float a = 68440675640679078541805800652800.0f; float b = a*a; cout << b << endl; } void main() { 浮子a=68440675640679078541805800652800.0f; 浮动b=a*a; cout您可以使用以下#pragma禁用特定的MSVC警告(但它必须在主功能之外和之前): #杂注警告(禁用:4756

下面的代码片段

void main()
{
   float a = 68440675640679078541805800652800.0f;
   float b = a*a;
   cout << b << endl;
}
void main()
{
浮子a=68440675640679078541805800652800.0f;
浮动b=a*a;

cout您可以使用以下
#pragma
禁用特定的
MSVC
警告(但它必须在
主功能之外和之前):

#杂注警告(禁用:4756)
void main()
{
浮子a=68440675640679078541805800652800.0f;
浮动b=a*a;

对于微软Visual C++,CUT< P>可以使用yFieldFPFS获取并设置浮点控制字。对于代码片段,可能的解决方案看起来像:

int main()
{
    unsigned int fp_control;
    //Reading
    _controlfp_s(&fp_control, 0, 0);
    //Make changes
    unsigned int new_fp_control = fp_control | _EM_OVERFLOW | _EM_UNDERFLOW;
    //Update
    _controlfp_s(&fp_control, new_fp_control, _MCW_EM);

    float a = 68440675640679078541805800652800.0f;
    float b = a*a;
    out << b << ed;
}
intmain()
{
无符号整数fp_控件;
//阅读
_controlfp_s(&fp_control,0,0);
//改变
unsigned int new_fp_control=fp_control | | EM_OVERFLOW | | EM_undflow;
//更新
_控制fp_s(和fp_控制、新fp_控制、MCW_EM);
浮子a=68440675640679078541805800652800.0f;
浮动b=a*a;

out警告C4756是一个编译时错误,它让您知道在编译时浮点b=a*a;
将产生溢出。您希望在编译时将什么值存储到
b
在这种情况下?上面的代码段编译得很好。问题是我遇到了运行时错误。我正在询问如何设置编译器,以便程序忽略运行时错误。要存储在b中的值与我无关。警告不是“编译时错误”@Richard。它们可以作为错误,但不是错误。显示此运行时错误@BlueTune。输出中显示的运行时错误为:在Main.exe中的0x000000014012D7EC处引发异常:0xC0000091:浮点溢出(参数:0x0000000000000000,0x00000000000011A8).Main.exe中0x000000014012D7EC处未处理的异常:0xC0000091:浮点溢出(参数:0x0000000000000000,0x00000000000011A8)。