Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
a0f2b85c
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a0f2b85c
编写于
4月 04, 2021
作者:
A
Alexey Milovidov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make round function to behave consistently on non-x86_64
上级
cb4e119c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
15 addition
and
2 deletion
+15
-2
src/Common/ErrorCodes.cpp
src/Common/ErrorCodes.cpp
+1
-0
src/Functions/FunctionsRound.h
src/Functions/FunctionsRound.h
+14
-2
未找到文件。
src/Common/ErrorCodes.cpp
浏览文件 @
a0f2b85c
...
...
@@ -547,6 +547,7 @@
M(577, INVALID_SHARD_ID) \
M(578, INVALID_FORMAT_INSERT_QUERY_WITH_DATA) \
M(579, INCORRECT_PART_TYPE) \
M(580, CANNOT_SET_ROUNDING_MODE) \
\
M(998, POSTGRESQL_CONNECTION_FAILURE) \
M(999, KEEPER_EXCEPTION) \
...
...
src/Functions/FunctionsRound.h
浏览文件 @
a0f2b85c
...
...
@@ -21,6 +21,8 @@
#ifdef __SSE4_1__
#include <smmintrin.h>
#else
#include <fenv.h>
#endif
...
...
@@ -34,6 +36,7 @@ namespace ErrorCodes
extern
const
int
ARGUMENT_OUT_OF_BOUND
;
extern
const
int
ILLEGAL_COLUMN
;
extern
const
int
BAD_ARGUMENTS
;
extern
const
int
CANNOT_SET_ROUNDING_MODE
;
}
...
...
@@ -231,7 +234,7 @@ inline float roundWithMode(float x, RoundingMode mode)
{
switch
(
mode
)
{
case
RoundingMode
::
Round
:
return
round
f
(
x
);
case
RoundingMode
::
Round
:
return
nearbyint
f
(
x
);
case
RoundingMode
::
Floor
:
return
floorf
(
x
);
case
RoundingMode
::
Ceil
:
return
ceilf
(
x
);
case
RoundingMode
::
Trunc
:
return
truncf
(
x
);
...
...
@@ -244,7 +247,7 @@ inline double roundWithMode(double x, RoundingMode mode)
{
switch
(
mode
)
{
case
RoundingMode
::
Round
:
return
round
(
x
);
case
RoundingMode
::
Round
:
return
nearbyint
(
x
);
case
RoundingMode
::
Floor
:
return
floor
(
x
);
case
RoundingMode
::
Ceil
:
return
ceil
(
x
);
case
RoundingMode
::
Trunc
:
return
trunc
(
x
);
...
...
@@ -595,6 +598,15 @@ public:
return
false
;
};
#if !defined(__SSE4_1__)
/// In case of "nearbyint" function is used, we should ensure the expected rounding mode for the Banker's rounding.
/// Actually it is by default. But we will set it just in case.
if
constexpr
(
rounding_mode
==
RoundingMode
::
Round
)
if
(
0
!=
fesetround
(
FE_TONEAREST
))
throw
Exception
(
"Cannot set floating point rounding mode"
,
ErrorCodes
::
CANNOT_SET_ROUNDING_MODE
);
#endif
if
(
!
callOnIndexAndDataType
<
void
>
(
column
.
type
->
getTypeId
(),
call
))
{
throw
Exception
(
"Illegal column "
+
column
.
name
+
" of argument of function "
+
getName
(),
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录