33#if !defined(INT128_MAX) && \
34 defined(__SIZEOF_INT128__)
42using uint128_t = __uint128_t;
48inline std::ostream&
operator<<(std::ostream& stream, primesum::uint128_t n)
54 str +=
'0' + char(n % 10);
62 stream << std::string(str.rbegin(), str.rend());
66inline std::ostream&
operator<<(std::ostream& stream, primesum::int128_t n)
73 stream << (primesum::uint128_t) n;
81 std::ostringstream oss;
88 std::ostringstream oss;
104 return std::numeric_limits<T>::max();
111 static constexpr int128_t
min() {
return ((int128_t) 1) << 127; }
112 static constexpr int128_t
max() {
return ~min(); }
118 static constexpr uint128_t
min() {
return 0; }
119 static constexpr uint128_t
max() {
return ~min(); }
127 value = std::is_integral<T>::value ||
128 std::is_same<T, int128_t>::value ||
129 std::is_same<T, uint128_t>::value
139 std::is_same<T, int128_t>::value
148 value = std::is_unsigned<T>::value ||
149 std::is_same<T, uint128_t>::value
std::ostream & operator<<(std::ostream &stream, primesum::uint128_t n)
The __int128_t type (GCC/Clang) is not well supported by the C++ standard library (in 2016) so we hav...
Portable namespace, includes functions which (unlike the versions form the C++ standard library) work...
std::string to_string(const uint128_t &n)
primesum::int128_t int128_t
static constexpr int128_t max()
static constexpr int128_t min()
static constexpr uint128_t max()
static constexpr uint128_t min()