MinusOne
پنج شنبه 13 تیر 1392, 16:07 عصر
دنبال سورس تابع floor می گشتم که به تابع زیر رسیدم . ظاهرا که ایرادی نداره. تو خطهای 8و9 ، در تعریف exponent و fractional_bits چیکار کرده ؟ و سوال دیگه اینکه چرا از کست کردنِ float به int به جای اینکار استفاده نمی شه ؟
float floor(float x)
{
union {
float f;
uint32_t i;
} val;
val.f = x;
int exponent = (val.i >> 23) & 0xff;
int fractional_bits = 127 + 23 - exponent;
if (fractional_bits > 23) // abs(x) < 1.0
return 0.0;
if (fractional_bits > 0)
val.i &= ~((1U << fractional_bits) - 1);
return val.f;
}
float floor(float x)
{
union {
float f;
uint32_t i;
} val;
val.f = x;
int exponent = (val.i >> 23) & 0xff;
int fractional_bits = 127 + 23 - exponent;
if (fractional_bits > 23) // abs(x) < 1.0
return 0.0;
if (fractional_bits > 0)
val.i &= ~((1U << fractional_bits) - 1);
return val.f;
}