fix type-punning warning with -fstrict-aliasing

This commit is contained in:
Michael Ossmann
2013-06-10 08:01:03 -06:00
parent 7c80b24460
commit fcae60b77a

View File

@ -781,23 +781,27 @@ int ADDCALL hackrf_set_sample_rate(hackrf_device* device, const double freq)
const int MAX_N = 32; const int MAX_N = 32;
uint32_t freq_hz, divider; uint32_t freq_hz, divider;
double freq_frac = 1.0 + freq - (int)freq; double freq_frac = 1.0 + freq - (int)freq;
uint64_t v, a, m; uint64_t a, m;
int i, e; int i, e;
v = *((uint64_t*)&freq); union {
e = (v >> 52) - 1023; uint64_t u64;
double d;
} v = { .d = freq };
e = (v.u64 >> 52) - 1023;
m = ((1ULL << 52) - 1); m = ((1ULL << 52) - 1);
v = *((uint64_t*)&freq_frac); v.d = freq_frac;
v &= m; v.u64 &= m;
m &= ~((1 << (e+4)) - 1); m &= ~((1 << (e+4)) - 1);
a = 0; a = 0;
for (i=1; i<MAX_N; i++) { for (i=1; i<MAX_N; i++) {
a += v; a += v.u64;
if (!(a & m) || !(~a & m)) if (!(a & m) || !(~a & m))
break; break;
} }