Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
9d218d57
Commit
9d218d57
authored
Dec 07, 2015
by
Janne Grunau
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
checkasm: add float comparison util functions
parent
711781d7
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
84 additions
and
0 deletions
+84
-0
checkasm.c
tests/checkasm/checkasm.c
+73
-0
checkasm.h
tests/checkasm/checkasm.h
+11
-0
No files found.
tests/checkasm/checkasm.c
View file @
9d218d57
...
...
@@ -27,6 +27,7 @@
#include "checkasm.h"
#include "libavutil/common.h"
#include "libavutil/cpu.h"
#include "libavutil/intfloat.h"
#include "libavutil/random_seed.h"
#if HAVE_IO_H
...
...
@@ -151,6 +152,78 @@ static struct {
/* PRNG state */
AVLFG
checkasm_lfg
;
/* float compare support code */
static
int
is_negative
(
union
av_intfloat32
u
)
{
return
u
.
i
>>
31
;
}
int
float_near_ulp
(
float
a
,
float
b
,
unsigned
max_ulp
)
{
union
av_intfloat32
x
,
y
;
x
.
f
=
a
;
y
.
f
=
b
;
if
(
is_negative
(
x
)
!=
is_negative
(
y
))
{
// handle -0.0 == +0.0
return
a
==
b
;
}
if
(
abs
(
x
.
i
-
y
.
i
)
<=
max_ulp
)
return
1
;
return
0
;
}
int
float_near_ulp_array
(
const
float
*
a
,
const
float
*
b
,
unsigned
max_ulp
,
unsigned
len
)
{
unsigned
i
;
for
(
i
=
0
;
i
<
len
;
i
++
)
{
if
(
!
float_near_ulp
(
a
[
i
],
b
[
i
],
max_ulp
))
return
0
;
}
return
1
;
}
int
float_near_abs_eps
(
float
a
,
float
b
,
float
eps
)
{
float
abs_diff
=
fabsf
(
a
-
b
);
return
abs_diff
<
eps
;
}
int
float_near_abs_eps_array
(
const
float
*
a
,
const
float
*
b
,
float
eps
,
unsigned
len
)
{
unsigned
i
;
for
(
i
=
0
;
i
<
len
;
i
++
)
{
if
(
!
float_near_abs_eps
(
a
[
i
],
b
[
i
],
eps
))
return
0
;
}
return
1
;
}
int
float_near_abs_eps_ulp
(
float
a
,
float
b
,
float
eps
,
unsigned
max_ulp
)
{
return
float_near_ulp
(
a
,
b
,
max_ulp
)
||
float_near_abs_eps
(
a
,
b
,
eps
);
}
int
float_near_abs_eps_array_ulp
(
const
float
*
a
,
const
float
*
b
,
float
eps
,
unsigned
max_ulp
,
unsigned
len
)
{
unsigned
i
;
for
(
i
=
0
;
i
<
len
;
i
++
)
{
if
(
!
float_near_abs_eps_ulp
(
a
[
i
],
b
[
i
],
eps
,
max_ulp
))
return
0
;
}
return
1
;
}
/* Print colored text to stderr if the terminal supports it */
static
void
color_printf
(
int
color
,
const
char
*
fmt
,
...)
{
...
...
tests/checkasm/checkasm.h
View file @
9d218d57
...
...
@@ -42,6 +42,17 @@ void checkasm_fail_func(const char *msg, ...) av_printf_format(1, 2);
void
checkasm_update_bench
(
int
iterations
,
uint64_t
cycles
);
void
checkasm_report
(
const
char
*
name
,
...)
av_printf_format
(
1
,
2
);
/* float compare utilities */
int
float_near_ulp
(
float
a
,
float
b
,
unsigned
max_ulp
);
int
float_near_abs_eps
(
float
a
,
float
b
,
float
eps
);
int
float_near_abs_eps_ulp
(
float
a
,
float
b
,
float
eps
,
unsigned
max_ulp
);
int
float_near_ulp_array
(
const
float
*
a
,
const
float
*
b
,
unsigned
max_ulp
,
unsigned
len
);
int
float_near_abs_eps_array
(
const
float
*
a
,
const
float
*
b
,
float
eps
,
unsigned
len
);
int
float_near_abs_eps_array_ulp
(
const
float
*
a
,
const
float
*
b
,
float
eps
,
unsigned
max_ulp
,
unsigned
len
);
extern
AVLFG
checkasm_lfg
;
#define rnd() av_lfg_get(&checkasm_lfg)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment