1. C++ / Говнокод #9281

    +1012

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    void Transponse()                                       // Транспонировать матрицу
       {
          m12 = m21; m13 = m31; m14 = m41;
          m21 = m12; m23 = m32; m24 = m42;
          m31 = m13; m32 = m23; m34 = m43;
          m41 = m14; m42 = m24; m43 = m34;
       }

    Запостил: Artur, 31 Января 2012

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

    • Transponse ... отсюда все беды. И элементы феерично объявлены.
      Ответить
    • Оптимизация.
      Ответить
    • АМИНЬ!
      Ответить
    • Интересно посмотреть на функцию нахождения определителя
      Ответить
      • Можете уже вствавлять в свой проект: http://govnokod.ru/7037
        Ответить
    • и никто пока не увидел, что значения проябываются
      Ответить
    • Нужно придумать директиву, чтобы в методе справа от = были копии старых значений. Тогда такой код будет естественен.
      Ответить
      • ты имеешь в виду result[i][j] = src[j][i] ... return result?
        это, будет новейшая технология, не побоюсь этого слова - парадигма
        запатентую и назову её фукцурным... функциративным... функционирующим программированием, надо подумать в общем над названием
        Ответить
        • Назови её резервирующим программированием. Потому что при входе в метод сохраняется копия. Он делает код нагляднее и чище. Подсчитано, что резервирующее программирование, за счёт уберегания программиста от многих ошибок, сокращает количество ошибок в коде в 2.71828 раз и повышает производительностью труда программиста в 3.141592653589 раз.
          Ответить
      • verilog, nonblocking assignment
        begin
            a <= b
            b <= c
            c <= a
        end
        Все эти присваивания выполнятся одновременно.
        Ответить
    • Транспонировать... дважды.
      Ответить
    • m12 = m21;
      m21 = m12;
      Ответить
    • Не пример правильного кода, но хоть работает:
      std::tie(m12, m13,  m14,
      m21, m23, m24,
      m31, m32, m34,
      m41, m42, m43)
      =
      std::tie(m21, m31, m41,
      m12, m32, m42,
      m13, m23, m43,
      m14, m24, m34);
      Ответить
    • не вникал в суть логики но это не гавнокод. писал его человек понимающий как как работает процессор. это оптимизация для CPU branch prediction.
      Ответить
    • Если каждый элемент в матрице - это не число, а класс с перегруженным знаком "равно", то всё окей.

      Но только с программой. А с мозгом кодера нифига не окей :(
      Ответить
    • Это транзакционная память, там эффект от присваивания не видно до киммита.
      Ответить
      • Даже в пределах текущей транзакции?
        Ответить
        • есть такая база где-то в недрах гугла - spanner. согласно их статье транзакции у них не видят свои же врайты.
          Ответить

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