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) {
|
||||
union {
|
||||
f64 d;
|
||||
uint64_t i;
|
||||
} y = { x };
|
||||
return y.i>>63;
|
||||
return F64_BITS(x)>>63;
|
||||
}
|
||||
|
||||
int _signbitf(float x) {
|
||||
union {
|
||||
float f;
|
||||
uint32_t i;
|
||||
} y = { x };
|
||||
return y.i>>31;
|
||||
return F32_BITS(x)>>31;
|
||||
}
|
||||
|
||||
int _signbitl(fl64 x) {
|
||||
return _signbit(x);
|
||||
return _signbit((f64)x);
|
||||
}
|
||||
|
||||
f64 copysign(f64 x, f64 y) {
|
||||
union {f64 f; uint64_t i;} ux={x}, uy={y};
|
||||
ux.i &= ~(1ULL<<63);
|
||||
ux.i |= uy.i & (1ULL<<63);
|
||||
return ux.f;
|
||||
u64 xbits = F64_BITS(x);
|
||||
u64 ybits = F64_BITS(y);
|
||||
xbits &= ~(UINT64_C(1)<<63);
|
||||
xbits |= ybits & (UINT64_C(1)<<63);
|
||||
return F64_CONS(xbits);
|
||||
}
|
||||
|
||||
float copysignf(float x, float y) {
|
||||
union {float f; uint32_t i;} ux={x}, uy={y};
|
||||
ux.i &= 0x7fffffff;
|
||||
ux.i |= uy.i & 0x80000000;
|
||||
return ux.f;
|
||||
u32 xbits = F32_BITS(x);
|
||||
u32 ybits = F32_BITS(y);
|
||||
xbits &= ~(UINT32_C(1)<<31);
|
||||
xbits |= ybits & (1u<<31);
|
||||
return F64_CONS(xbits);
|
||||
}
|
||||
|
||||
fl64 copysignl(fl64 x, fl64 y) {
|
||||
return copysign(x, y);
|
||||
return copysign((f64)x, (f64)y);
|
||||
}
|
||||
|
||||
f64 nan(const char *s) {
|
||||
|
|
Loading…
Reference in New Issue