src/SysDeps/fenv.h

説明を見る。
00001 // 
00002 // Copyright (c) 2005-2008 Kenichi Watanabe.
00003 // Copyright (c) 2005-2008 Yasuhiro Watari.
00004 // Copyright (c) 2005-2008 Hironori Ichibayashi.
00005 // Copyright (c) 2008-2009 Kazuo Horio.
00006 // Copyright (c) 2009-2013 Naruki Kurata.
00007 // Copyright (c) 2005-2013 Ryota Shioya.
00008 // Copyright (c) 2005-2013 Masahiro Goshima.
00009 // 
00010 // This software is provided 'as-is', without any express or implied
00011 // warranty. In no event will the authors be held liable for any damages
00012 // arising from the use of this software.
00013 // 
00014 // Permission is granted to anyone to use this software for any purpose,
00015 // including commercial applications, and to alter it and redistribute it
00016 // freely, subject to the following restrictions:
00017 // 
00018 // 1. The origin of this software must not be misrepresented; you must not
00019 // claim that you wrote the original software. If you use this software
00020 // in a product, an acknowledgment in the product documentation would be
00021 // appreciated but is not required.
00022 // 
00023 // 2. Altered source versions must be plainly marked as such, and must not be
00024 // misrepresented as being the original software.
00025 // 
00026 // 3. This notice may not be removed or altered from any source
00027 // distribution.
00028 // 
00029 // 
00030 
00031 
00032 #ifndef __SYSDEPS_FPU_H__
00033 #define __SYSDEPS_FPU_H__
00034 
00035 // C99 fp environment functions
00036 
00037 #include "SysDeps/host_type.h"
00038 
00039 #if defined( COMPILER_IS_MSVC )
00040 #include <float.h>
00041 
00042 const int FE_DOWNWARD = _RC_DOWN;
00043 const int FE_UPWARD = _RC_UP;
00044 const int FE_TONEAREST = _RC_NEAR;
00045 const int FE_TOWARDZERO = _RC_CHOP;
00046 
00047 inline int fegetround(void)
00048 {
00049     unsigned int fpcr;
00050     _controlfp_s(&fpcr, 0, 0);
00051     return (int)(fpcr & _MCW_RC);
00052 }
00053 
00054 inline int fesetround(int rounding_mode)
00055 {
00056     unsigned int fpcr;
00057     return _controlfp_s(&fpcr, (unsigned int)rounding_mode, _MCW_RC);
00058 }
00059 
00060 
00061 #elif defined( COMPILER_IS_GCC )
00062 #   ifndef _GNU_SOURCE
00063 #       define _GNU_SOURCE
00064 #   endif
00065 #   include <fenv.h>
00066 #else
00067 #   error "unknown compiler"
00068 #endif
00069 
00070 const int FE_ROUNDDEFAULT = FE_TONEAREST;
00071 
00072 namespace Onikiri {
00073     // setrounds\
00074     class ScopedFESetRound {
00075     public:
00076         ScopedFESetRound(int mode) {
00077             m_oldMode = fegetround();
00078             fesetround(mode);
00079         }
00080         ~ScopedFESetRound() {
00081             fesetround(m_oldMode);
00082         }
00083     private:
00084         int m_oldMode;
00085     };
00086 }
00087 
00088 #endif

Onikiri2に対してTue Jun 18 14:34:26 2013に生成されました。  doxygen 1.4.7