численные методы
Dec. 2nd, 2006 03:46 amИсследование одного очень красивого хака (PDF, англ.) - быстрого вычисления функции 1/sqrt(x) (обратный квадратный корень):
float InvSqrt(float x)
{
float xhalf = 0.5f*x;
int i = *(int*)&x; // get bits for floating value
i = 0x5f3759df - (i>>1); // gives initial guess
x = *(float*)&i; // convert bits back to float
x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy
return x;
}
Статья объясняет, почему и как это работает, и откуда взялась таинственная магическая константа 0x5f3759df.
Очень красиво.
Кстати, если не ошибаюсь, при чтении этого кода и этой статьи мне впервые понадобилось вообще для чего-либо знание метода приближений Ньютона, с тех пор, как я его выучил на курсе численных методов в университете 12 лет назад.
no subject
Date: 2006-12-02 01:59 am (UTC)no subject
Date: 2006-12-02 02:05 am (UTC)no subject
Date: 2006-12-02 02:39 am (UTC)no subject
Date: 2006-12-02 02:43 am (UTC)???
Date: 2006-12-02 03:34 am (UTC)no subject
Date: 2006-12-02 05:32 am (UTC)http://www.beyond3d.com/articles/fastinvsqrt/
no subject
Date: 2006-12-02 06:39 am (UTC)Недурно. А я, кстати,
Date: 2006-12-02 09:19 am (UTC)no subject
Date: 2006-12-02 09:43 am (UTC)насколько я помню, magic number просто подбирали долго...
no subject
Date: 2006-12-02 02:00 pm (UTC)no subject
Date: 2006-12-02 05:23 pm (UTC)no subject
Date: 2006-12-02 06:29 pm (UTC)no subject
Date: 2006-12-02 06:45 pm (UTC)А как Вы находите такие ссылки? Я бы почитал ещё что-нибудь подобное
no subject
Date: 2006-12-02 10:16 pm (UTC)no subject
Date: 2006-12-02 10:38 pm (UTC)no subject
Date: 2006-12-02 10:39 pm (UTC)Re: ???
Date: 2006-12-02 10:39 pm (UTC)no subject
Date: 2006-12-03 02:51 am (UTC)Если v=(0.v1v2v3v4...)2, где v1=1, то начальное приближение z=1/v выбирается таким:
z0 = 1/4 * [32/(4*v1 + 2*v2 + v3)],
а далее проводятся итерации по Ньютону для k=0,...; 2k < N:
Vk=(0.v1v2v3...v2k+1+3)2
zk+1 = 2*zk - Vk*zk2 + r, где r, удовлетворяющее неравенству, 0<=r<2-2k+1-1, прибавляется при необходимости, чтобы zk+1 было кратным 2-2k+1-1.
А с таблицами - это как?
no subject
Date: 2006-12-03 02:59 am (UTC)no subject
Date: 2006-12-03 03:00 am (UTC)Деление через метод Ньютона - это, например, http://www.ecs.umass.edu/ece/koren/arith/slides/Part8-div-mlt.ppt
no subject
Date: 2006-12-04 03:57 pm (UTC)