diff --git a/include/fennec/lang/detail/__int.h b/include/fennec/lang/detail/__int.h index 77c866c..bcd0c54 100644 --- a/include/fennec/lang/detail/__int.h +++ b/include/fennec/lang/detail/__int.h @@ -22,6 +22,8 @@ #if _MSC_VER #pragma warning(push) #pragma warning(disable:4117) + +#define __PTRDIFF_TYPE__ ptrdiff_t #endif #pragma push_macro("__cplusplus") diff --git a/include/fennec/lang/float.h b/include/fennec/lang/float.h index fdc75a8..1cca5dd 100644 --- a/include/fennec/lang/float.h +++ b/include/fennec/lang/float.h @@ -80,7 +80,7 @@ #define FLT_EPSILON fennec::bit_cast(0x34000000) #define FLT_INF fennec::bit_cast(0x7f800000) #define FLT_QUIET_NAN fennec::bit_cast(0x7fc00000) -#define FLT_SIGNALING_NAN fennec::bit_cast(0x7fc00001) +#define FLT_SIGNALING_NAN fennec::bit_cast(0x7fa00000) #define FLT_DENORM_MIN fennec::bit_cast(0x1) #define FLT_ROUND_ERR fennec::bit_cast(0x3f000000) @@ -132,7 +132,7 @@ #define DBL_EPSILON fennec::bit_cast(0x3cb0000000000000ll) #define DBL_INF fennec::bit_cast(0x7ff0000000000000ll) #define DBL_QUIET_NAN fennec::bit_cast(0x7ff8000000000000ll) -#define DBL_SIGNALING_NAN fennec::bit_cast(0x7ff0000000000001ll) +#define DBL_SIGNALING_NAN fennec::bit_cast(0x7ff4000000000000ll) #define DBL_DENORM_MIN fennec::bit_cast(0x1ll) #define DBL_ROUND_ERR fennec::bit_cast(0x3fe0000000000000ll) diff --git a/include/fennec/lang/integer.h b/include/fennec/lang/integer.h index f7acb65..99ca549 100644 --- a/include/fennec/lang/integer.h +++ b/include/fennec/lang/integer.h @@ -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 diff --git a/include/fennec/lang/types.h b/include/fennec/lang/types.h index 5cb22dc..e9d341d 100644 --- a/include/fennec/lang/types.h +++ b/include/fennec/lang/types.h @@ -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 using void_t = void; ///< \brief Void type used for SFINAE diff --git a/include/fennec/math/common.h b/include/fennec/math/common.h index 92ce873..b118537 100644 --- a/include/fennec/math/common.h +++ b/include/fennec/math/common.h @@ -451,13 +451,13 @@ constexpr vector trunc(const vector& x) template constexpr genType roundEven(genType x) { - const float e = numeric_limits::epsilon(); - float f = x - fennec::floor(x); + const genType e = numeric_limits::epsilon(); + genType f = x - fennec::floor(x); if (fennec::abs(f - genType(0.5)) > e) return fennec::round(x); - float i = fennec::floor(x); - float r = i / 2; + genType i = fennec::floor(x); + genType r = i / 2; bool up = r - fennec::floor(r) > e; return i + static_cast(up); }