- 论坛徽章:
- 14
|
本帖最后由 bruceteen 于 2013-06-15 12:20 编辑
回复 6# sanagi1987
没用的,我用 MinGW4.7.2 来试验,如下代码输出全是 0 2 2 4 4- #include <stdio.h>
- #include <float.h>
- _CRTIMP unsigned int __cdecl __MINGW_NOTHROW _controlfp (unsigned int unNew, unsigned int unMask);
- #define _MCW_RC 0x00000300
- #define _RC_CHOP 0x00000300
- #define _RC_UP 0x00000200
- #define _RC_DOWN 0x00000100
- #define _RC_NEAR 0x00000000
- int main()
- {
- printf( "%0.f %.0f %.0f %.0f %.0f\n", 0.5, 1.5, 2.5, 3.5, 4.5 );
-
- _controlfp( _RC_NEAR, _MCW_RC );
- printf( "%0.f %.0f %.0f %.0f %.0f\n", 0.5, 1.5, 2.5, 3.5, 4.5 );
-
- _controlfp( _RC_DOWN, _MCW_RC );
- printf( "%0.f %.0f %.0f %.0f %.0f\n", 0.5, 1.5, 2.5, 3.5, 4.5 );
-
- _controlfp( _RC_UP, _MCW_RC );
- printf( "%0.f %.0f %.0f %.0f %.0f\n", 0.5, 1.5, 2.5, 3.5, 4.5 );
-
- _controlfp( _RC_CHOP, _MCW_RC );
- printf( "%0.f %.0f %.0f %.0f %.0f\n", 0.5, 1.5, 2.5, 3.5, 4.5 );
- return 0;
- }
复制代码 换另一种方法,依然是 0 2 2 4 4- #include <stdio.h>
- #include <fenv.h>
- #pragma STDC FENV_ACCESS ON
- int main()
- {
- printf( "%0.f %.0f %.0f %.0f %.0f\n", 0.5, 1.5, 2.5, 3.5, 4.5 );
-
- fesetround( FE_TONEAREST );
- printf( "%0.f %.0f %.0f %.0f %.0f\n", 0.5, 1.5, 2.5, 3.5, 4.5 );
-
- fesetround( FE_DOWNWARD );
- printf( "%0.f %.0f %.0f %.0f %.0f\n", 0.5, 1.5, 2.5, 3.5, 4.5 );
-
- fesetround( FE_UPWARD );
- printf( "%0.f %.0f %.0f %.0f %.0f\n", 0.5, 1.5, 2.5, 3.5, 4.5 );
-
- fesetround( FE_TOWARDZERO );
- printf( "%0.f %.0f %.0f %.0f %.0f\n", 0.5, 1.5, 2.5, 3.5, 4.5 );
- return 0;
- }
复制代码 |
|