PDA

View Full Version : تابع کف (floor)



MinusOne
پنج شنبه 13 تیر 1392, 15: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;
}

UfnCod3r
پنج شنبه 13 تیر 1392, 16:28 عصر
حالا حتما باید دل و رودشو بریزی بیرون
اینم Floor من :تشویق:

#define _XFLOORF(x) ((x) < 0.0f ? ((int)((x)-0.99999f)) : ((int)(x)))

MinusOne
پنج شنبه 13 تیر 1392, 16:47 عصر
خوب منم همینو میگم وقتی میشه راحت کست کرد اصلا چرا همچین تابعی تو math.h وجود داره ؟

UfnCod3r
پنج شنبه 13 تیر 1392, 16:59 عصر
نه کست معمولی که نمیشه عدد منفی باشه مشکل پیش میاد
اینی ک من نوشتم هم ممکنه بعضی مواقع نتیجه اشتباه در بیاد ولی از floor سریع تره و من بعضی جاها ازش استفاده می کنم:لبخند:
بحرحال همین تابع floor هم درسته اگه سرعتش براتون مهمه خب بحثش ی چی دیگست:لبخندساده:

MinusOne
پنج شنبه 13 تیر 1392, 17:08 عصر
درستیشو که مطمئنم نحوه کارشو میخوام بدونم