Update float_twice
This commit is contained in:
parent
8360bdc1fe
commit
e55a744aab
|
@ -368,63 +368,28 @@ unsigned float_i2f(int x)
|
|||
* Max ops: 30
|
||||
* Rating: 4
|
||||
*/
|
||||
// unsigned float_twice(unsigned uf)
|
||||
// {
|
||||
// // INF and NaN judge
|
||||
// int expMask, exp, sign, signMask, frac, fracMask, uf_nosign;
|
||||
// expMask = 0x7f800000; // get exponent bits
|
||||
// exp = (uf & expMask);
|
||||
// if (exp == expMask)
|
||||
// {
|
||||
// return uf;
|
||||
// }
|
||||
// // Special numbers
|
||||
// signMask = 0x80000000; // get sign bit
|
||||
// sign = (uf & signMask) >> 31;
|
||||
// fracMask = 0x007fffff; // get fraction bits
|
||||
// frac = uf & fracMask;
|
||||
// if (sign == 0 && frac == 0) // Zero, just return 0
|
||||
// {
|
||||
// return 0;
|
||||
// }
|
||||
// // Denormalizd numbers
|
||||
// uf_nosign = uf & 0x7fffffff; // remove sign bit
|
||||
// if ((uf_nosign >> 23) == 0)
|
||||
// {
|
||||
// uf_nosign = uf_nosign << 1 | sign;
|
||||
// return uf_nosign;
|
||||
// }
|
||||
// // Normalized numbers
|
||||
// if (uf_nosign >> 23 == 0xff) //??
|
||||
// {
|
||||
// return uf;
|
||||
// }
|
||||
// if ((exp >> 23) + 1 == 0xff)
|
||||
// {
|
||||
// return sign | 0x7f800000;
|
||||
// }
|
||||
// return sign | ((exp >> 23) + 1) << 23 | frac << 1;
|
||||
// }
|
||||
|
||||
unsigned float_twice(unsigned uf)
|
||||
{
|
||||
int uf_nosign;
|
||||
int sign = uf & 0x80000000; // sign bit
|
||||
int exp = uf & 0x7f800000; // exponent bits
|
||||
int fraction = uf & 0x7fffff; // fraction bits
|
||||
uf_nosign = uf & 0x7fffffff; // remove sign
|
||||
if ((uf_nosign >> 23) == 0x0)
|
||||
int sign = uf & 0x80000000; // sign bit
|
||||
int exp = uf & 0x7f800000; // exponent bits
|
||||
int fraction = uf & 0x7fffff; // fraction bits
|
||||
uf_nosign = uf & 0x7fffffff; // remove sign
|
||||
if ((uf_nosign >> 23) == 0x0) // denormalized condition
|
||||
{
|
||||
uf_nosign = uf_nosign << 1 | sign;
|
||||
return uf_nosign;
|
||||
}
|
||||
if ((uf_nosign >> 23) == 0xff)
|
||||
if ((uf_nosign >> 23) == 0xff) // special numbers (NaN and infty)
|
||||
{
|
||||
return uf;
|
||||
}
|
||||
if ((exp >> 23) + 1 == 0xff)
|
||||
// if ((exp >> 23) + 1 == 0xff) // exponent overflow
|
||||
if (exp == 0x7f000000) // exponent overflow
|
||||
{
|
||||
return sign | 0x7f800000;
|
||||
}
|
||||
return sign | (((exp >> 23) + 1) << 23) | fraction;
|
||||
// return sign | (((exp >> 23) + 1) << 23) | fraction;
|
||||
return sign | (exp + 0x800000) | fraction;
|
||||
}
|
Binary file not shown.
Loading…
Reference in New Issue