Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenCV
opencv
提交
4dd75544
O
opencv
项目概览
OpenCV
/
opencv
上一次同步 9 个月
通知
992
Star
71100
Fork
55581
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
4dd75544
编写于
9月 04, 2023
作者:
A
Alexander Smorkalov
提交者:
GitHub
9月 04, 2023
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #24215 from Kumataro:fix24213
core: arm64: v_round() works with round to nearest, ties to even.
上级
d19fc126
72bb8bb7
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
8 addition
and
4 deletion
+8
-4
modules/core/include/opencv2/core/hal/intrin_neon.hpp
modules/core/include/opencv2/core/hal/intrin_neon.hpp
+2
-2
modules/core/test/test_intrin_utils.hpp
modules/core/test/test_intrin_utils.hpp
+6
-2
未找到文件。
modules/core/include/opencv2/core/hal/intrin_neon.hpp
浏览文件 @
4dd75544
...
...
@@ -1997,12 +1997,12 @@ inline v_int32x4 v_trunc(const v_float32x4& a)
inline
v_int32x4
v_round
(
const
v_float64x2
&
a
)
{
static
const
int32x2_t
zero
=
vdup_n_s32
(
0
);
return
v_int32x4
(
vcombine_s32
(
vmovn_s64
(
vcvt
a
q_s64_f64
(
a
.
val
)),
zero
));
return
v_int32x4
(
vcombine_s32
(
vmovn_s64
(
vcvt
n
q_s64_f64
(
a
.
val
)),
zero
));
}
inline
v_int32x4
v_round
(
const
v_float64x2
&
a
,
const
v_float64x2
&
b
)
{
return
v_int32x4
(
vcombine_s32
(
vmovn_s64
(
vcvt
aq_s64_f64
(
a
.
val
)),
vmovn_s64
(
vcvta
q_s64_f64
(
b
.
val
))));
return
v_int32x4
(
vcombine_s32
(
vmovn_s64
(
vcvt
nq_s64_f64
(
a
.
val
)),
vmovn_s64
(
vcvtn
q_s64_f64
(
b
.
val
))));
}
inline
v_int32x4
v_floor
(
const
v_float64x2
&
a
)
...
...
modules/core/test/test_intrin_utils.hpp
浏览文件 @
4dd75544
...
...
@@ -1475,12 +1475,15 @@ template<typename R> struct TheTest
TheTest
&
test_float_math
()
{
typedef
typename
V_RegTraits
<
R
>::
round_reg
Ri
;
Data
<
R
>
data1
,
data2
,
data3
;
Data
<
R
>
data1
,
data1_border
,
data2
,
data3
;
// See https://github.com/opencv/opencv/issues/24213
data1_border
*=
0.5
;
data1
*=
1.1
;
data2
+=
10
;
R
a1
=
data1
,
a2
=
data2
,
a3
=
data3
;
R
a1
=
data1
,
a
1_border
=
data1_border
,
a
2
=
data2
,
a3
=
data3
;
Data
<
Ri
>
resB
=
v_round
(
a1
),
resB_border
=
v_round
(
a1_border
),
resC
=
v_trunc
(
a1
),
resD
=
v_floor
(
a1
),
resE
=
v_ceil
(
a1
);
...
...
@@ -1493,6 +1496,7 @@ template<typename R> struct TheTest
{
SCOPED_TRACE
(
cv
::
format
(
"i=%d"
,
i
));
EXPECT_EQ
(
cvRound
(
data1
[
i
]),
resB
[
i
]);
EXPECT_EQ
(
cvRound
(
data1_border
[
i
]),
resB_border
[
i
]);
EXPECT_EQ
((
typename
VTraits
<
Ri
>::
lane_type
)
data1
[
i
],
resC
[
i
]);
EXPECT_EQ
(
cvFloor
(
data1
[
i
]),
resD
[
i
]);
EXPECT_EQ
(
cvCeil
(
data1
[
i
]),
resE
[
i
]);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录