Compare commits
2 Commits
9ea63478e5
...
0eeb7ae3cf
| Author | SHA1 | Date | |
|---|---|---|---|
| 0eeb7ae3cf | |||
| e2ea22f12d |
@@ -22,6 +22,8 @@
|
||||
#if _MSC_VER
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4117)
|
||||
|
||||
#define __PTRDIFF_TYPE__ ptrdiff_t
|
||||
#endif
|
||||
|
||||
#pragma push_macro("__cplusplus")
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
#define FLT_EPSILON fennec::bit_cast<float>(0x34000000)
|
||||
#define FLT_INF fennec::bit_cast<float>(0x7f800000)
|
||||
#define FLT_QUIET_NAN fennec::bit_cast<float>(0x7fc00000)
|
||||
#define FLT_SIGNALING_NAN fennec::bit_cast<float>(0x7fc00001)
|
||||
#define FLT_SIGNALING_NAN fennec::bit_cast<float>(0x7fa00000)
|
||||
#define FLT_DENORM_MIN fennec::bit_cast<float>(0x1)
|
||||
#define FLT_ROUND_ERR fennec::bit_cast<float>(0x3f000000)
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
#define DBL_EPSILON fennec::bit_cast<double>(0x3cb0000000000000ll)
|
||||
#define DBL_INF fennec::bit_cast<double>(0x7ff0000000000000ll)
|
||||
#define DBL_QUIET_NAN fennec::bit_cast<double>(0x7ff8000000000000ll)
|
||||
#define DBL_SIGNALING_NAN fennec::bit_cast<double>(0x7ff0000000000001ll)
|
||||
#define DBL_SIGNALING_NAN fennec::bit_cast<double>(0x7ff4000000000000ll)
|
||||
#define DBL_DENORM_MIN fennec::bit_cast<double>(0x1ll)
|
||||
#define DBL_ROUND_ERR fennec::bit_cast<double>(0x3fe0000000000000ll)
|
||||
|
||||
|
||||
@@ -57,26 +57,26 @@
|
||||
#define CHAR_DIG 0x2
|
||||
#define CHAR_DECIMAL_DIG 0x0
|
||||
#define CHAR_RADIX 0x2
|
||||
#define CHAR_TRAPS 0xfalse
|
||||
#define CHAR_TRAPS 0xtrue
|
||||
#define CHAR_MIN 0x80
|
||||
#define CHAR_MAX 0x7f
|
||||
|
||||
#define WCHAR_IS_SIGNED false
|
||||
#define WCHAR_IS_SIGNED true
|
||||
#define WCHAR_ROUNDS 0x0
|
||||
#define WCHAR_RADIX_DIG 0x10
|
||||
#define WCHAR_DIG 0x4
|
||||
#define WCHAR_RADIX_DIG 0x1f
|
||||
#define WCHAR_DIG 0x9
|
||||
#define WCHAR_DECIMAL_DIG 0x0
|
||||
#define WCHAR_RADIX 0x2
|
||||
#define WCHAR_TRAPS 0xfalse
|
||||
#define WCHAR_MIN 0x0
|
||||
#define WCHAR_MAX 0xffff
|
||||
#define WCHAR_TRAPS 0xtrue
|
||||
#define WCHAR_MIN 0x80000000
|
||||
#define WCHAR_MAX 0x7fffffff
|
||||
|
||||
#define SCHAR_ROUNDS 0x0
|
||||
#define SCHAR_RADIX_DIG 0x7
|
||||
#define SCHAR_DIG 0x2
|
||||
#define SCHAR_DECIMAL_DIG 0x0
|
||||
#define SCHAR_RADIX 0x2
|
||||
#define SCHAR_TRAPS 0xfalse
|
||||
#define SCHAR_TRAPS 0xtrue
|
||||
#define SCHAR_MIN 0x80
|
||||
#define SCHAR_MAX 0x7f
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
#define UCHAR_DIG 0x2
|
||||
#define UCHAR_DECIMAL_DIG 0x0
|
||||
#define UCHAR_RADIX 0x2
|
||||
#define UCHAR_TRAPS 0xfalse
|
||||
#define UCHAR_TRAPS 0xtrue
|
||||
#define UCHAR_MIN 0x0
|
||||
#define UCHAR_MAX 0xff
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
#define SHORT_DIG 0x4
|
||||
#define SHORT_DECIMAL_DIG 0x0
|
||||
#define SHORT_RADIX 0x2
|
||||
#define SHORT_TRAPS 0xfalse
|
||||
#define SHORT_TRAPS 0xtrue
|
||||
#define SHORT_MIN 0x8000
|
||||
#define SHORT_MAX 0x7fff
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
#define USHORT_DIG 0x4
|
||||
#define USHORT_DECIMAL_DIG 0x0
|
||||
#define USHORT_RADIX 0x2
|
||||
#define USHORT_TRAPS 0xfalse
|
||||
#define USHORT_TRAPS 0xtrue
|
||||
#define USHORT_MIN 0x0
|
||||
#define USHORT_MAX 0xffff
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
#define INT_DIG 0x9
|
||||
#define INT_DECIMAL_DIG 0x0
|
||||
#define INT_RADIX 0x2
|
||||
#define INT_TRAPS 0xfalse
|
||||
#define INT_TRAPS 0xtrue
|
||||
#define INT_MIN 0x80000000
|
||||
#define INT_MAX 0x7fffffff
|
||||
|
||||
@@ -121,34 +121,34 @@
|
||||
#define UINT_DIG 0x9
|
||||
#define UINT_DECIMAL_DIG 0x0
|
||||
#define UINT_RADIX 0x2
|
||||
#define UINT_TRAPS 0xfalse
|
||||
#define UINT_TRAPS 0xtrue
|
||||
#define UINT_MIN 0x0
|
||||
#define UINT_MAX 0xffffffff
|
||||
|
||||
#define LONG_ROUNDS 0x0
|
||||
#define LONG_RADIX_DIG 0x1f
|
||||
#define LONG_DIG 0x9
|
||||
#define LONG_RADIX_DIG 0x3f
|
||||
#define LONG_DIG 0x12
|
||||
#define LONG_DECIMAL_DIG 0x0
|
||||
#define LONG_RADIX 0x2
|
||||
#define LONG_TRAPS 0xfalse
|
||||
#define LONG_MIN 0x80000000
|
||||
#define LONG_MAX 0x7fffffff
|
||||
#define LONG_TRAPS 0xtrue
|
||||
#define LONG_MIN 0x8000000000000000
|
||||
#define LONG_MAX 0x7fffffffffffffff
|
||||
|
||||
#define ULONG_ROUNDS 0x0
|
||||
#define ULONG_RADIX_DIG 0x20
|
||||
#define ULONG_DIG 0x9
|
||||
#define ULONG_RADIX_DIG 0x40
|
||||
#define ULONG_DIG 0x13
|
||||
#define ULONG_DECIMAL_DIG 0x0
|
||||
#define ULONG_RADIX 0x2
|
||||
#define ULONG_TRAPS 0xfalse
|
||||
#define ULONG_TRAPS 0xtrue
|
||||
#define ULONG_MIN 0x0
|
||||
#define ULONG_MAX 0xffffffff
|
||||
#define ULONG_MAX 0xffffffffffffffff
|
||||
|
||||
#define LLONG_ROUNDS 0x0
|
||||
#define LLONG_RADIX_DIG 0x3f
|
||||
#define LLONG_DIG 0x12
|
||||
#define LLONG_DECIMAL_DIG 0x0
|
||||
#define LLONG_RADIX 0x2
|
||||
#define LLONG_TRAPS 0xfalse
|
||||
#define LLONG_TRAPS 0xtrue
|
||||
#define LLONG_MIN 0x8000000000000000
|
||||
#define LLONG_MAX 0x7fffffffffffffff
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
#define ULLONG_DIG 0x13
|
||||
#define ULLONG_DECIMAL_DIG 0x0
|
||||
#define ULLONG_RADIX 0x2
|
||||
#define ULLONG_TRAPS 0xfalse
|
||||
#define ULLONG_TRAPS 0xtrue
|
||||
#define ULLONG_MIN 0x0
|
||||
#define ULLONG_MAX 0xffffffffffffffff
|
||||
|
||||
|
||||
@@ -256,7 +256,7 @@ namespace fennec
|
||||
using intmax_t = intmax_t; ///< \brief Maximum Width Signed Integer Type
|
||||
using uintmax_t = uintmax_t; ///< \brief Maximum Width Unsigned Integer Type
|
||||
using size_t = size_t; ///< \brief Unsigned Integer Type Returned By `sizeof`, `sizeof...`, and `alignof`
|
||||
using ptrdiff_t = ptrdiff_t; ///< \brief Signed Integer Type Returned by the Subtraction of two Pointers
|
||||
using ptrdiff_t = __PTRDIFF_TYPE__; ///< \brief Signed Integer Type Returned by the Subtraction of two Pointers
|
||||
|
||||
class undefined_t; ///< \brief undefined class for SFINAE
|
||||
template<typename...> using void_t = void; ///< \brief Void type used for SFINAE
|
||||
|
||||
@@ -451,15 +451,23 @@ constexpr vector<genType, i...> trunc(const vector<genType, i...>& x)
|
||||
template<typename genType>
|
||||
constexpr genType roundEven(genType x)
|
||||
{
|
||||
const float e = numeric_limits<genType>::epsilon();
|
||||
float f = x - fennec::floor(x);
|
||||
if (fennec::abs(f - genType(0.5)) > e)
|
||||
//const genType e = numeric_limits<genType>::epsilon();
|
||||
//genType f = x - fennec::floor(x);
|
||||
//if (fennec::abs(f - genType(0.5)) > e)
|
||||
// return fennec::round(x);
|
||||
//
|
||||
//genType i = fennec::floor(x);
|
||||
//genType r = i / 2;
|
||||
//bool up = r - fennec::floor(r) > e;
|
||||
//return i + static_cast<genType>(up);
|
||||
static const genType e = std::numeric_limits<genType>::epsilon();
|
||||
genType i = fennec::floor(x);
|
||||
genType f = x - i;
|
||||
if (abs(f - genType(0.5)) > e)
|
||||
return fennec::round(x);
|
||||
|
||||
float i = fennec::floor(x);
|
||||
float r = i / 2;
|
||||
bool up = r - fennec::floor(r) > e;
|
||||
return i + static_cast<genType>(up);
|
||||
bool dir = (static_cast<int>(x) % 2);
|
||||
return dir ? i + 1 : i;
|
||||
}
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user