Очень рекомендую к прочтению замечательную статью "Магия"
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. 10th, 2011 14:27 (UTC)Он был представителем знатного, но обедневшего княжеского рода и должен был вступить во владение немецкими имениями своего отца, где он и провел бы свою жизнь в хозяйственных хлопотах и заботах об обедневшем поместье, если бы не внезапная смерть его бездетного кузена Рене Нассауского, которая неожиданно изменила всю предстоявшую ему жизненную карьеру. [url=http://vigdispo.krovatka.su/prostitutki-izhevska-nomera-telefonov-238.html]проститутки ижевска номера телефонов[/url] В Кюхельбекера принимает великий Гете, некогда дружный с его отцом. [url=http://sekleteyaux.krovatka.su/otkrovennoe-porno-foto-prostitutok-822.html]откровенное порно фото проституток[/url] Однако возник конфликт с группой жителей прилегающих домов, ожидавших, что в новом здании откроют общеобразовательную среднюю школу. [url=http://dustykb.krovatka.su/bez-prostitutok-i-vorov-nagovicyn-827.html]без проституток и воров наговицын[/url] Ты сделаешь переворот в нашей словесности, и никто более тебя того не достоин". [url=http://dustykb.krovatka.su/prostitutki-na-minskom-464.html]проститутки на минском[/url] На корабле Вильгельм Густлов, который тонул хоть и чуть больше часа, но был охвачен огромной паникой, т. [url=http://chingqu.krovatka.su/batrudinov-prostitutka-okno-444.html]батрудинов проститутка окно[/url] Одна из основных заслуг Гризингера в том, что он сумел ввести в психиатрию принципы психологии Гербарта 17741841 и, таким образом, свести психику как целое к рефлексам.