36 if(v.
exp > 0)
return (
double)v.
mant * (double)(1 << v.
exp);
37 else return (
double)v.
mant / (double)(1 << (-v.
exp));
47 sign = (idx << 27) >> 31;
49 cv = (cv ^ sign) - sign;
52 sign = (idx << 27) >> 31;
54 sv = (sv ^ sign) - sign;
60 idx = (int)(((int64_t)cv * ct - (int64_t)sv * st + 0x20000000) >> 30);
62 sv = (int)(((int64_t)cv * st + (int64_t)sv * ct + 0x20000000) >> 30);
70 idx = (int)(((int64_t)cv * ct - (int64_t)sv * st + 0x20000000) >> 30);
72 sv = (int)(((int64_t)cv * st + (int64_t)sv * ct + 0x20000000) >> 30);
77 ct = (int)(((int64_t)
av_costbl_4_sf[idx & 0x1f] * (0x800 - (a & 0x7ff)) +
80 st = (int)(((int64_t)
av_sintbl_4_sf[idx & 0x1f] * (0x800 - (a & 0x7ff)) +
84 *c = (int)(((int64_t)cv * ct + (int64_t)sv * st + 0x20000000) >> 30);
86 *s = (int)(((int64_t)cv * st + (int64_t)sv * ct + 0x20000000) >> 30);
100 printf(
"test1 double=%d\n", (
int)(d1 * (1<<24)));
103 for(i= 0; i<10; i++){
106 printf(
"test1 sf =%d\n",
av_sf2int(sf1, 24));
109 for(i= 0; i<100; i++){
113 for(j= 0; j<1000; j++){
118 printf(
"test2 double=%d\n", (
int)(d1 * (1<<24)));
120 for(i= 0; i<100; i++){
124 for(j= 0; j<1000; j++){
136 printf(
"test3 double: %.10lf\n", d3);
143 printf(
"test3 softfloat: %.10lf (0x%08x %d)\n", (
double)
av_sf2double(sf3), sf3.
mant, sf3.
exp);
146 printf(
"test4 softfloat: %.10lf (0x%08x %d)\n", (
double)
av_sf2double(sf1), sf1.
mant, sf1.
exp);
148 printf(
"test4 softfloat: %.10lf (0x%08x %d)\n", (
double)
av_sf2double(sf1), sf1.
mant, sf1.
exp);
151 printf(
"test4 softfloat: %.10lf (0x%08x %d)\n", (
double)
av_sf2double(sf1), sf1.
mant, sf1.
exp);
153 printf(
"test4 softfloat: %.10lf (0x%08x %d)\n", (
double)
av_sf2double(sf1), sf1.
mant, sf1.
exp);
static const SoftFloat FLOAT_1374_40625
static const int32_t av_costbl_4_sf[33]
void av_log_set_level(int level)
Set the log level.
static av_const SoftFloat av_div_sf(SoftFloat a, SoftFloat b)
b has to be normalized and not zero.
static const int32_t av_sintbl_3_sf[32]
static av_const SoftFloat av_normalize_sf(SoftFloat a)
static const SoftFloat FLOAT_0_017776489257
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
static av_const int av_sf2int(SoftFloat v, int frac_bits)
Rounding is to -inf.
static const int32_t av_costbl_2_sf[32]
void av_sincos_sf(int a, int *s, int *c)
Rounding-to-nearest used.
static const int32_t av_costbl_1_sf[16]
static const int32_t av_sintbl_2_sf[32]
static av_const SoftFloat av_add_sf(SoftFloat a, SoftFloat b)
common internal and external API header
static av_const double av_sf2double(SoftFloat v)
static av_const SoftFloat av_mul_sf(SoftFloat a, SoftFloat b)
static const int32_t av_sintbl_4_sf[33]
static const int32_t av_costbl_3_sf[32]
static av_const SoftFloat av_int2sf(int v, int frac_bits)
Converts a mantisse and exponent to a SoftFloat.
static const SoftFloat FLOAT_0_1249694824218