Очень рекомендую к прочтению замечательную статью "Магия"
kunaifusu про довольно стандартный трик магического преобразования floating point в int с помощью загадочных констант.
В статье очень детально и вкусно расписываются корни преобразования и происхождение чисел вроде
Что характерно, рассказывается как сделать это без double ;)
Помню своё удивление, когда я впервые увидел зубодробительные пассажи для табличного вычисления синусов и косинусов, которые начинались с характерного приведения аргументов
Уже потом появились cvtps2pi, споры о тормозах, выравнивания, спецхинты и инструкции. Естественно, не везде (ц).
А тогда это было интересным и свежим взглядом на жизнь.
Особенно из-за явного джедайского форса.
Который молча рубил одной строчкой тупые брутальные
Клёвая статья, спасибо! :)
Ну и танкистские ссылки напоследок:
1. "What Every Computer Scientist Should Know About Floating Point Arithmetic" by David Goldberg
2. "Let's Go to the (Floating) Point" by Chris Hecker
3. "Магия" by
kunaifusu
4. "Origin of Quake3's Fast InvSqrt()" - Part I, читать камменты, Part II (via
qiller_neu)
В статье очень детально и вкусно расписываются корни преобразования и происхождение чисел вроде
(double)fp+6755399441055744.0
Что характерно, рассказывается как сделать это без double ;)
Помню своё удивление, когда я впервые увидел зубодробительные пассажи для табличного вычисления синусов и косинусов, которые начинались с характерного приведения аргументов
inline float SinCosFast(float x, float &cosx)
{
x= 0.159155f*x +1536.0f;
...
}
Уже потом появились cvtps2pi, споры о тормозах, выравнивания, спецхинты и инструкции. Естественно, не везде (ц).
А тогда это было интересным и свежим взглядом на жизнь.
Особенно из-за явного джедайского форса.
Который молча рубил одной строчкой тупые брутальные
const int a = *reinterpret_cast<const int*>(&fp);
const int sign = (a>>31);
const int mantissa = (a&((1<<23)-1))|(1<<23);
const int exponent = ((a&0x7fffffff)>>23)-127;
const int r = ((unsigned int)(mantissa)<<8)>>(31-exponent);
return ((r ^ (sign)) - sign ) &~ (exponent>>31);
Клёвая статья, спасибо! :)
Ну и танкистские ссылки напоследок:
1. "What Every Computer Scientist Should Know About Floating Point Arithmetic" by David Goldberg
2. "Let's Go to the (Floating) Point" by Chris Hecker
3. "Магия" by
4. "Origin of Quake3's Fast InvSqrt()" - Part I, читать камменты, Part II (via
снять проститутку в стерлитамаке сайт фотографий прос
Date: May. 6th, 2011 00:45 (UTC)Он провел свою юность в тех же пригородах Вашингтона, что и МакКэндлесс, и счел их удушающими. [url=http://kikiliyal9.krovatka.su/uslugi-prostitutki-v-solikamske-425.html]услуги проститутки в соликамске[/url] А в разных должностях состоял: сперва в казачках находился, фалетором был, садовником, а то и доезжачим. [url=http://christyom.krovatka.su/bolshe-vsego-prostitutok-na-ulice-70.html]больше всего проституток на улице[/url] Однако & это не просто магазин, скрапбукинг для нас это не только и не столько бизнес, сколько наше увлечение, которым мы хотим поделиться. [url=http://erica9v.newmail.ru/forum-snyat-prostitutku-526.html]форум снять проститутку[/url] Тургеневе На страницах сайта вы найдете много интересной и познавательной информации о выдающемся русском писателе Иване Сергеевиче Тургеневе. [url=http://zosim2w.hotmail.ru/indevidualki-prostitutki-276.html]индевидуалки проститутки[/url] На крыльях своих они, наверно, унесли капли росы, и песни их казались орошенными росою. [url=http://britneyke.pochtamt.ru/prostitutki-m-Studencheskaya-237.html]проститутки м Студенческая[/url] В сфере розничной торговли все эти процессы видны невооружённым взглядом.