aruslan: (Default)
[personal profile] aruslan
Очень рекомендую к прочтению замечательную статью "Магия" [livejournal.com profile] kunaifusu про довольно стандартный трик магического преобразования floating point в int с помощью загадочных констант.

В статье очень детально и вкусно расписываются корни преобразования и происхождение чисел вроде
  (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 [livejournal.com profile] kunaifusu
4. "Origin of Quake3's Fast InvSqrt()" - Part I, читать камменты, Part II (via [livejournal.com profile] qiller_neu)
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org

Profile

aruslan: (Default)
aruslan

January 2014

S M T W T F S
   1234
56789 1011
12131415161718
19202122232425
262728293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 26th, 2025 10:48
Powered by Dreamwidth Studios