Няшная / Говнокод #10294 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
typedef int32_t wl_fixed_t;

//было:
static inline double wl_fixed_to_double(wl_fixed_t f)
{
  return (double) f / 256.0;
}

//стало:
static inline double wl_fixed_to_double(wl_fixed_t f)
{
  union {
    double d;
    int64_t i;
  } u;

  u.i = ((1023LL + 44LL) << 52) + (1LL << 51) + f;

  return u.d - (3LL << 43);
}

Заоптимизировали...

Запостил: rat4 rat4, (Updated )

Комментарии (23) RSS

        • Написал им в рассылку, они там все употребляют тяжёлые вещи...
          Ответить
    • 1LL << 51 - старший бит мантиссы выставляем в единичку
      +f - младшие биты мантиссы заполняем нашим числом
      (1023LL+44LL)<<52 - порядок равен 2^44

      Т.о. младшие 8 бит f попали в дробную часть, а старшие 44 в целую, но к ним прибавили 2^43 (та самая единичка сдвинутая на 51) и 2^44 - неявная единичка в виртуальном 53 бите мантиссы.

      Нижняя строчка как раз корректирует это, вычитая 2^43*3 = 2^43+2^44.

      P.S. мое описание для положительных чисел, для отрицательных пока не вкурил, но тем не менее код работает и для них.
      Ответить
  • Да кстати, код должен баговать начиная с 2^44. В отличие от первоначальной версии.
    Ответить
    • На большие числа там можно забить, и на отрицательные, наверное, тоже.

      UPD:
      >int32_t
      >2^44
      Что-то тут не так...
      Ответить
      • По сути, Wayland - это и есть X12. Пилится он разработчиками иксов с пониманием тех граблей, на которые наступили X11 за многолетнюю свою историю.

        И я, если что, только за Wayland. Вот только непонятно, как там с блобами жить.
        Ответить
    • My results on Intel(R) Core(TM)2 Duo CPU T5800 @ 2.00GHz

      on x86:
      benchmarked magic: 14.048889885s
      benchmarked mul: 4.034106976s

      on x86-64:
      benchmarked magic: 2.467789582s
      benchmarked mul: 8.665307997s
      Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8