mirror of https://github.com/flysand7/ciabatta.git
some float stuff
This commit is contained in:
parent
abd8710841
commit
b62d074764
|
@ -55,41 +55,35 @@ int _fpclassifyl(fl64 x) {
|
||||||
|
|
||||||
|
|
||||||
int _signbit(f64 x) {
|
int _signbit(f64 x) {
|
||||||
union {
|
return F64_BITS(x)>>63;
|
||||||
f64 d;
|
|
||||||
uint64_t i;
|
|
||||||
} y = { x };
|
|
||||||
return y.i>>63;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int _signbitf(float x) {
|
int _signbitf(float x) {
|
||||||
union {
|
return F32_BITS(x)>>31;
|
||||||
float f;
|
|
||||||
uint32_t i;
|
|
||||||
} y = { x };
|
|
||||||
return y.i>>31;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int _signbitl(fl64 x) {
|
int _signbitl(fl64 x) {
|
||||||
return _signbit(x);
|
return _signbit((f64)x);
|
||||||
}
|
}
|
||||||
|
|
||||||
f64 copysign(f64 x, f64 y) {
|
f64 copysign(f64 x, f64 y) {
|
||||||
union {f64 f; uint64_t i;} ux={x}, uy={y};
|
u64 xbits = F64_BITS(x);
|
||||||
ux.i &= ~(1ULL<<63);
|
u64 ybits = F64_BITS(y);
|
||||||
ux.i |= uy.i & (1ULL<<63);
|
xbits &= ~(UINT64_C(1)<<63);
|
||||||
return ux.f;
|
xbits |= ybits & (UINT64_C(1)<<63);
|
||||||
|
return F64_CONS(xbits);
|
||||||
}
|
}
|
||||||
|
|
||||||
float copysignf(float x, float y) {
|
float copysignf(float x, float y) {
|
||||||
union {float f; uint32_t i;} ux={x}, uy={y};
|
u32 xbits = F32_BITS(x);
|
||||||
ux.i &= 0x7fffffff;
|
u32 ybits = F32_BITS(y);
|
||||||
ux.i |= uy.i & 0x80000000;
|
xbits &= ~(UINT32_C(1)<<31);
|
||||||
return ux.f;
|
xbits |= ybits & (1u<<31);
|
||||||
|
return F64_CONS(xbits);
|
||||||
}
|
}
|
||||||
|
|
||||||
fl64 copysignl(fl64 x, fl64 y) {
|
fl64 copysignl(fl64 x, fl64 y) {
|
||||||
return copysign(x, y);
|
return copysign((f64)x, (f64)y);
|
||||||
}
|
}
|
||||||
|
|
||||||
f64 nan(const char *s) {
|
f64 nan(const char *s) {
|
||||||
|
|
Loading…
Reference in New Issue