mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 00:30:49 +00:00
Addition to prev. revision #3926
This commit is contained in:
parent
c6ecb1db3f
commit
2e323192a2
129
dbms/src/Common/intExp.h
Normal file
129
dbms/src/Common/intExp.h
Normal file
@ -0,0 +1,129 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <limits>
|
||||
|
||||
#include <Common/Defines.h>
|
||||
|
||||
|
||||
/// On overlow, the function returns unspecified value.
|
||||
|
||||
inline NO_SANITIZE_UNDEFINED uint64_t intExp2(int x)
|
||||
{
|
||||
return 1ULL << x;
|
||||
}
|
||||
|
||||
inline uint64_t intExp10(int x)
|
||||
{
|
||||
if (x < 0)
|
||||
return 0;
|
||||
if (x > 19)
|
||||
return std::numeric_limits<uint64_t>::max();
|
||||
|
||||
static const uint64_t table[20] =
|
||||
{
|
||||
1ULL, 10ULL, 100ULL,
|
||||
1000ULL, 10000ULL, 100000ULL,
|
||||
1000000ULL, 10000000ULL, 100000000ULL,
|
||||
1000000000ULL, 10000000000ULL, 100000000000ULL,
|
||||
1000000000000ULL, 10000000000000ULL, 100000000000000ULL,
|
||||
1000000000000000ULL, 10000000000000000ULL, 100000000000000000ULL,
|
||||
1000000000000000000ULL, 10000000000000000000ULL
|
||||
};
|
||||
|
||||
return table[x];
|
||||
}
|
||||
|
||||
namespace common
|
||||
{
|
||||
|
||||
inline int exp10_i32(int x)
|
||||
{
|
||||
static const int values[] = {
|
||||
1,
|
||||
10,
|
||||
100,
|
||||
1000,
|
||||
10000,
|
||||
100000,
|
||||
1000000,
|
||||
10000000,
|
||||
100000000,
|
||||
1000000000
|
||||
};
|
||||
return values[x];
|
||||
}
|
||||
|
||||
inline int64_t exp10_i64(int x)
|
||||
{
|
||||
static const int64_t values[] = {
|
||||
1ll,
|
||||
10ll,
|
||||
100ll,
|
||||
1000ll,
|
||||
10000ll,
|
||||
100000ll,
|
||||
1000000ll,
|
||||
10000000ll,
|
||||
100000000ll,
|
||||
1000000000ll,
|
||||
10000000000ll,
|
||||
100000000000ll,
|
||||
1000000000000ll,
|
||||
10000000000000ll,
|
||||
100000000000000ll,
|
||||
1000000000000000ll,
|
||||
10000000000000000ll,
|
||||
100000000000000000ll,
|
||||
1000000000000000000ll
|
||||
};
|
||||
return values[x];
|
||||
}
|
||||
|
||||
inline __int128 exp10_i128(int x)
|
||||
{
|
||||
static const __int128 values[] = {
|
||||
static_cast<__int128>(1ll),
|
||||
static_cast<__int128>(10ll),
|
||||
static_cast<__int128>(100ll),
|
||||
static_cast<__int128>(1000ll),
|
||||
static_cast<__int128>(10000ll),
|
||||
static_cast<__int128>(100000ll),
|
||||
static_cast<__int128>(1000000ll),
|
||||
static_cast<__int128>(10000000ll),
|
||||
static_cast<__int128>(100000000ll),
|
||||
static_cast<__int128>(1000000000ll),
|
||||
static_cast<__int128>(10000000000ll),
|
||||
static_cast<__int128>(100000000000ll),
|
||||
static_cast<__int128>(1000000000000ll),
|
||||
static_cast<__int128>(10000000000000ll),
|
||||
static_cast<__int128>(100000000000000ll),
|
||||
static_cast<__int128>(1000000000000000ll),
|
||||
static_cast<__int128>(10000000000000000ll),
|
||||
static_cast<__int128>(100000000000000000ll),
|
||||
static_cast<__int128>(1000000000000000000ll),
|
||||
static_cast<__int128>(1000000000000000000ll) * 10ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 100ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 1000ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 10000ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 100000ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 1000000ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 10000000ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 100000000ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 1000000000ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 10000000000ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 100000000000ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 1000000000000ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 10000000000000ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 100000000000000ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 1000000000000000ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 10000000000000000ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 100000000000000000ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 100000000000000000ll * 10ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 100000000000000000ll * 100ll,
|
||||
static_cast<__int128>(1000000000000000000ll) * 100000000000000000ll * 1000ll
|
||||
};
|
||||
return values[x];
|
||||
}
|
||||
|
||||
}
|
@ -6,7 +6,7 @@
|
||||
#include <DataTypes/DataTypeArray.h>
|
||||
#include <Interpreters/castColumn.h>
|
||||
|
||||
#include <common/intExp.h>
|
||||
#include <Common/intExp.h>
|
||||
#include <cmath>
|
||||
#include <type_traits>
|
||||
#include <array>
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include <Functions/FunctionFactory.h>
|
||||
#include <Functions/FunctionUnaryArithmetic.h>
|
||||
#include <Common/FieldVisitors.h>
|
||||
#include <common/intExp.h>
|
||||
#include <Common/intExp.h>
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include <Functions/FunctionFactory.h>
|
||||
#include <Functions/FunctionUnaryArithmetic.h>
|
||||
#include <Common/FieldVisitors.h>
|
||||
#include <common/intExp.h>
|
||||
#include <Common/intExp.h>
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include <common/LocalDate.h>
|
||||
#include <common/LocalDateTime.h>
|
||||
#include <common/find_symbols.h>
|
||||
#include <common/intExp.h>
|
||||
#include <Common/intExp.h>
|
||||
|
||||
#include <Core/Types.h>
|
||||
#include <Core/UUID.h>
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include <common/intExp.h>
|
||||
#include <Common/intExp.h>
|
||||
|
||||
#include <Parsers/CommonParsers.h>
|
||||
#include <Parsers/ParserSampleRatio.h>
|
||||
|
@ -31,7 +31,6 @@ add_library (common ${LINK_MODE}
|
||||
include/common/ErrorHandlers.h
|
||||
include/common/preciseExp10.h
|
||||
include/common/shift10.h
|
||||
include/common/intExp.h
|
||||
include/common/mremap.h
|
||||
include/common/likely.h
|
||||
include/common/logger_useful.h
|
||||
|
Loading…
Reference in New Issue
Block a user