O
Пау-чок

Логарифм по основанию двойки. Погрешность результата ±0.008. Отрабатывает во флеше (естественно, не в таком виде) где-то в 4.5 раз быстрее. В сях тестил - получилось быстрее раз в 6.5.

float log2_K = 0.344285328223736808439525702852;
float log2_K_dbl_and_128 = 128.688570656447473616879051405704;

float inline log2_(float x){
union{
float f; //32 bit float
uint32_t i; //32 bit unsigned int
}y,m,Ex;
uint32_t E;
y.f=x;
E=y.i&0x7F800000;
Ex.i=((E^0x7F800000)-0x800000)&0x7F800000;
Ex.f*=x;
m.i=(y.i&0x7FFFFF)|0x3F800000;
y.f=m.f+(float)(E>>23)-log2_K*Ex.f*(Ex.f-3)-log2_K_dbl_and_128;
return y.f;
}


В принципе, можно получить и бо́льшую точность. Тем более, что запас по быстродействию в позволяет.
Но мне стало лень =)

@музыка: Rock-online: Smokie - Who The X Is Alice (living Next Door To Alice)

@темы: программерское