1. Си / Говнокод #8650

    +102

    1. 1
    #define HESHELME_BESHELME(x, y) (((x)>0)<<2 | ((y)>0)<<1 | ((x) > ((x)*(y) > 0 ? (y) : -(y))))

    двумерное "квантование" точки

    Запостил: orion, 26 Ноября 2011

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

    • хитровыебанный код.
      Ответить
    • Лучше бы без умножения.
      Ответить
      • было бы очень интересно увидеть вариант без умножения. Может кто-нибудь предложит?
        ЗЫ: квантовать хочется в [0..7], последовательность не обязательна.
        Ответить
    • > HESHELME_BESHELME
      ahalai-mahalai
      Ответить
    • А функцию вообще никак нельзя было использовать?
      x вычисляется трижды, y - четырежды.
      Ответить
      • показать все, что скрыто>x вычисляется трижды, y - четырежды.
        При срабатывании оптимизации expression elimination x и y по одному разу вычисляются.

        >А функцию вообще никак нельзя было использовать?
        Можно, но автор не подумал.
        Ответить
        • > При срабатывании оптимизации expression elimination x и y по одному разу вычисляются.

          HESHELME_BESHELME(foo(), bar())

          где foo(), bar() — функции с побочными эффектами.
          И что тут можно соптимизировать?

          --
          Ваш Кэп
          Ответить
          • >где foo(), bar() — функции с побочными эффектами.
            И что тут можно соптимизировать?

            Лол. Если функции с побочными эффектами, тогда макрос нельзя применять. Каждый раз x и y новые значения будет в пределах макроса принимать или рушить логику работы программы.

            --
            Ваш Кэп
            Ответить
            • > Если функции с побочными эффектами, тогда макрос нельзя применять
              Ну так о том и речь. Только тогда о этом точно должен знать мейнтейнер кода, что лично я считаю лишним неоправданным напрягом.
              Ответить
              • А смысл упоминать вариант, при котором точно не сработает оптимизация в полную силу, если программа всё равно работает не в соответствии с алгоритмом?

                Зачем выкручивался, как уж на сковородке? Сразу бы сказал, если знал, что макрос применять крайне не желательно. Это противоречит безопасному проектированию и поддержке.
                Ответить
          • >где foo(), bar() — функции с побочными эффектами.
            И что тут можно соптимизировать?

            Как ты определил, что параметры макроса вызывают побочные эффекты? Из данного куска кода определить это нельзя. Поэтому голословно утверждать это нужно. Там может простое использование и никаких побочных эффектов:
            point p=foobar();
            auto k=HESHELME_BESHELME(p.x,p.y);
            И уж тем более нельзя сказать с учетом возможной оптимизации expression elimination, что параметры функции вычисляются точно несколько раз.

            Но использование автором макросов - я некоим образом не оправдываю.
            Ответить
    • Мне больше интересно:
      Какой физический смысл вкладывается в слово "квантование" и где такое применяется?
      Ответить
      • http://en.wikipedia.org/wiki/Quantization_%28signal_processing%29
        Конкретно этот код использовался при обнаружении пешеходов на изображении.
        В качестве обучаемых признаков использовал гистограмму ориентированных градиентов (HOG). В локальной окрестности находится направление градиента - угол [0..360), который квантовался в моем случае в [0..8). Из всех таких квантованных углов как раз и строится гистограмма.
        Ответить
        • Кармагеддон ИРЛ?
          Ответить
          • нет =) задание в универе.
            если интересно, http://courses.graphicon.ru/main/cg/2011/assignment02
            Ответить
            • А мы, внезапно, учимся в одном универе. Правда, на разных курсах. Govnokod - connecting people.
              Ответить
              • я почти джва года уже как закончил ;)
                а вообще, имхо, машграф был самый классный курс за все время обучения
                Ответить
              • Ну как, окончил ВУЗ?
                Ответить
            • Ссылка не открывается.
              Ответить
        • Спасибо.
          Ответить
      • показать все, что скрытоМудакам этого не понять
        Ответить
    • показать все, что скрытоvanished
      Ответить
    • ну и гавно люди учат... нам зачем-то рассказывали про распределенные вычисления в сетях :) или как построить использовать расчетные методы в физ процессах. или как просчитать заторы на разных конвейерах ... хм. А вот еще вспомнил "Разница между паровозами и есть сложность" :)
      Ответить
      • > "Разница между паровозами и есть сложность"
        Это вореции?
        Ответить
        • Это величина, оторванная в область дипломатии.
          Ответить
          • Те-ле-фун-кен
            Ответить
            • Тред-симулятор инсульта. Читая его, можно понять, как чувствует себя пациент.
              Ответить
              • Можно пужулуйста ещё картинок самых уродливых лосей населявших Мурманский полуостров?
                Ответить
                • Илья Муромец работает по другой линии, но у нас есть для вас прекрасный Игорь Гофман

                  https://www.youtube.com/watch?v=u3TjWRmVMQE

                  а вот лонглисен
                  https://www.youtube.com/watch?v=Wb7eV47YOm4
                  Ответить

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