Избавиться от ветвления

Тема в разделе "WASM.BEGINNERS", создана пользователем Scratch, 1 ноя 2010.

  1. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    green
    Вообще-то в моём варианте неявное преобразование тоже вполне срабатывает. Причём полностью согласно стандарту.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    green
    Другое дело.

    l_inc
    Что-то оно в VS 2010 не срабатывает. И по какому стандарту знаковое должно неявно преобразовываться к беззнаковому?
     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Booster
    И только что проверил VS 2010. Срабатывает.
     
  4. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Вот мой вариант:
    Код (Text):
    1. result = a - (int)(((unsigned __int64)(unsigned)a - 1) >> 32);
    По идее должно оптимизироваться без операции сдвига.
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    l_inc
    У вас же a это unsigned int. Всё, претензий не имею.
     
  6. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    https://wasm.ru/forum/viewtopic.php?id=37858
     
  7. FLASH300

    FLASH300 New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2008
    Сообщения:
    72
    может cmpxchg подойдет (т.е. CAS вроде )
     
  8. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Табличной трансляцией.
    Объявить инициализированный массив с элементами 1,1,2,3,4,5.....
    Для переменной размером в один байт нужно будет 256 байт.
    Для 2-байтовых чисел потребуется уже 128 кб.
    Для 4-байтовых 16 Гб.
     
  9. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Хороший компилятор переведёт оператор (bool_exp) ? exp1 : exp2; в код без ветвления - тогда не нужны эти логические выкрутасы - они только замедлят код.
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Форум решил подчеркнуть важность всех моих постов, или это только у меня в глазах двоится?
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    это глюк, на самом деле пост один.
    для проверки я отредактировал один из них - тепер ьсообщение о редактировании отображается в обоих.

    потом со временем уйдет
     
  12. ADZ

    ADZ New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    41
    to diamond
    А не подскажите как книжка называется?
     
  13. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    ADZ
    "Алгоритмические трюки для программистов", Генри Уоррен.