如何控制浮点异常.

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 nhsoft 的 blog

//浮点异常的控制位
#define fpuem_invalidop     0x01
#define fpuem_denormalop    0x02
#define fpuem_zerodivide    0x04
#define fpuem_overflow      0x08
#define fpuem_underflow     0x10
#define fpuem_precison      0x20

#define __force_inline__ __inline
/*----------------------------------------------------------
打开指定的浮点异常
-----------------------------------------------------------*/
__force_inline__ static void   enablefloatexception(__int16 excword = 0x000f)
{
    __int16 cw;
    __asm
    {
        not     excword
            fstcw   cw
            mov     ax , excword
            and     cw , ax
            fldcw   cw
    }
}

/*----------------------------------------------------------
关闭指定的浮点异常
-----------------------------------------------------------*/
__force_inline__ static void  disablefloatexception(__int16 excword = 0x000f)
{
    __int16 cw;
    __asm
    {
        fstcw   cw
        mov     ax , excword
        or      cw , ax
        fldcw   cw
    }
}


int _tmain(int argc, _tchar* argv[])
{
    int   a = 10;
    float b = 0;
    float c;
    float pi = 3.1415926/2.0 ;
    __int16 cw=0x0000;

    enablefloatexception();
    c = a/b;
    disablefloatexception();
    c= a/b;
 return c;
}

本文关键:如何控制浮点异常.
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top