int
int copied to clipboard
Some operation errors
I've found some errors. And I wrote a new test function
static inline void testBigNumbers() {
uint128_t a1 = std::numeric_limits<uint128_t>::max() * 1;
assert2(a1, std::numeric_limits<uint128_t>::max()); // Ok
a1 = std::numeric_limits<uint128_t>::max() * 1.;
assert2(a1, std::numeric_limits<uint128_t>::max());
//a1 = 340282366920938463454151235394913435648
// have to be 340282366920938463463374607431768211455
a1 = std::numeric_limits<uint128_t>::max() / 2;
uint128_t a2 = std::numeric_limits<uint128_t>::max() / 2.;
assert2(a1, a2);
// a1 = 0
// a2 = 340282366920938463454151235394913435648
// have to be 1.7014118346046923e+38
uint256_t a3 = std::numeric_limits<uint128_t>::max();
uint128_t a4 = a3 * 1.1;
assert2(a4, 37431060361303234_uint256);
// a4 = 340282366920938463454151235394913435648
// must be 3.7431060361303234e+38
uint256_t c1 = 100000000000000000000_uint256;
uint256_t c2 = 100000000000000000000_uint256;
uint256_t c3 = c1 * c2;
assert2(c3, 10000000000000000000000000000000000000000_uint256);
}
#define assert2(a, b) \
{ \
if ((a) != (b)) { \
std::cerr << "first = " << a << std::endl; \
std::cerr << "second = " << b << std::endl; \
throw std::runtime_error(#a ", line:" + std::to_string(__LINE__)); \
} \
}