1. ActionScript / Говнокод #4221

    −160

    1. 1
    2. 2
    3. 3
    4. 4
    function midVal(X, Y)
    {
        return (Math.max(X, Y) - Math.min(X, Y)) / 2 + Math.min(X, Y);
    }

    Это среднее арифметическое один один чел так считает.
    Взято отсюда: http://www.gamedev.ru/flame/forum/?id=137879&page=4#m47
    Тема сама по себе весёлая.

    Запостил: TarasB, 10 Сентября 2010

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

    • интересно...
      а как он ср.геометрическое считает?..
      Ответить
      • Думаю, так:
        return Math.sqrt(Math.max(X, Y) / Math.min(X, Y)) * Math.min(X, Y);
        Ответить
    • ...мдя... там такие умы советы дают, что лучше вообще молчать...
      --
      "... Предлагаю рассчитать задачу с учётом теории относительности, время брать относительно машины.
      Также следует учесть, что при изменении скорости между 1 и 2 кругом система отсчёта станосится неинерциальной, и там классические преобразования не катят. ..."
      Ответить
      • ...какой-то TarasB жжёт... :))
        Ответить
      • Не толсти.
        Ответить
        • да ты и задачу саму запость :)
          ---
          тут тоже всем миром решать будем :))
          --
          (кстати это в JavaScrыpt тоже прокатит)
          Ответить
        • "...Специально там зарегился, чтоб поучавствовать в обсуждениях..."
          :)
          Ответить
      • Ага. Какое отношение secondLapSpeed / (secondLapSpeed / firstLapSpeed) имеет к теории относительности?
        Ответить
        • Специально для долбоёбов: про теорию относительности - это шутка типа была.
          Ответить
          • Значит, ответ адресован не мне. Но только шутки там несмешные.

            Полистал все странички. После ответа TarasB на первой странице всё остальное можно считать флудом.

            Код недостаточно индусский. Надо предложить такую же формулу для среднего гармонического и решать методом Ньютона как нелинейное уравнение.
            Ответить
            • хрена лысого... для метода Ньютона буфера не хватит...
              Ответить
              • Особенно учитывая, что «корень» уравнения — бесконечность!
                Ответить
            • > Надо предложить такую же формулу для среднего гармонического

              http://govnokod.ru/4221#comment46988
              Ответить
              • Цитирую: «а как он ср.геометрическое считает»
                Для гармонического надо хитрее!
                2*Math.max(X, Y)/(1 + Math.max(X, Y)/Math.min(X, Y))
                Ответить
        • после 30 км/ч геометрия Евклида становится комментариями...
          геометрия Римана начинает рулить...
          на втором круге её обходит геометрия Лобачевского...
          Ответить
      • машина ездит по кругу, так что СТО не катит, надо пользоваться ОТО.
        Ответить
    • Защита от переполнения?
      Ответить
      • В AS оно бывет разве?)
        Ответить
        • Без понятия... Но хоть какое-то обоснование.
          Ответить
      • А ведь похоже на то! Но только зачем min и max? (X - Y) / 2 + Y не пройдёт? Или боязнь отрицательных чисел? Кстати, если X и Y имеют разные знаки, то этот алгоритм может вызвать переполнение, а обычный (X + Y) — нет!
        Ответить
        • взялся решать задачу по физике пятого класса, не зная арифметики из программы четвертого. конец немного предсказуем.
          Ответить
        • П.С. Должно быть (X + Y) / 2, а то, что написано в последней строке — для запутывания врагов.
          Ответить
    • М-де, переход в систему отсчета, связанную с автомобилем должен помочь. Преобразования Лоренца не катят, т.к. машина ездит по кругу, а значит ее система отсчета неинерциальна + у нее скорость меняется после первого круга.
      Ответить
      • ...и гк заразился...
        Ответить
      • попробуйте перейти к сферическим координатам и пренебречь атмосферным давлением
        Ответить
      • чёрт возьми...
        такой накал страстей... такой научный тык...
        видимо придётся проводить опыты
        Ответить
      • Я ровно то же и сказал.
        Ответить
    • А скорость средняя путевая или средняя векторная? Если средняя векторная, то круг незамкнут!
      Ответить
    • а как избежать переполнения? x/2+y/2?
      Ответить
      • Там на форуме TarasB намекнул что (x + y) * 0.5 - лучше будет...
        Ответить
      • В вещественных — да. А если кого-то интересует в целых, то нужно ещё вспомнить про остатки, то есть добавить к результату ((x & 1) + (y & 1)) / 2.
        Ответить
        • плюс вспоминаем про сдвиги
          Ответить
          • Конечно, делить на 2 будем сдвигом вправо! А если нужно ср. арифметическое трёх чисел, то достанем троичные компы.
            Ответить
            • а остатки будем сечь флагами!
              Ответить
            • чем не устраивает true, false и null в убогих языках которые ЭТО поддерживають?
              Ответить
              • Если мы считаем ср. арифметическое трёх чисел, то для оптимизации деления на три сдвигом потребуется троичная арифметика. А про среднее арифметическое пяти чисел лучше не говорить!
                Ответить
                • тихо-тихо... ух, разогнались-то...
                  Ответить
                  • Радует то, что для ср. арифметического десяти чисел годятся BCD — двоично-десятичные числа.
                    Ответить
                • всякие там бозоны и нейтрино просто в ауте валяются...
                  Ответить
                • что нам... мы и пространство перестроим - дай только нам троичную логику...
                  --
                  :)
                  Ответить
                • http://cdsweb.cern.ch/record/1221536/files/icon-202.gif
                  Ответить
                • >>для оптимизации деления на три сдвигом потребуется троичная арифметика.

                  не потребуется. сказал бы, но тред уже заглох
                  Ответить
                  • * 0x55555555
                    На 32-разрядные числа действует так же, как деление на 3.
                    Ответить
                    • >>>* 0x55555555
                      это один из стандартных способов - ниче особенного, тем более мы говорили о оптимизации деления на три сдвигом

                      мой вариант - лучше и быстрее, хоть и требует больше сил для реализации и неуниверсален.

                      сумма бесконечно убывающей прогресии с q=1/4
                      Ответить
                      • x + (x>>2) + (x>>4)+...
                        Это то же самое, что умножение на 555555555, только дольше.
                        Ответить
                        • с каких это пор сдвиги и сложения медленее умножения, да еще и на такие вот числа?
                          Ответить
                          • А чё, умножение не три такта делается?
                            Ответить
                            • На разных CPU по-разному. Я дак привык сверяться по таблице задержек для athlon, у которого умножение из регистров выполняется 5-6 тактов, а из ОЗУ 8-9 тактов.
                              Ответить
                              • Ну 5-6 тактов, ладно. А 16 сдвигов - сколько тактов?
                                Так вот, заменять умножение сдвигами имеет смысл, только если двоичное разложение множителя содержит не более 3 единиц.

                                Поэтому ПИ ляпнул не подумав:
                                > мой вариант - лучше и быстрее
                                Ответить
                                • блин. кажись я заходил сюда прямо перед выпилом говнокода, и мои коментарии стерлись.

                                  во-первых я тогда глянул в интеловскую документацию - там указано кажись (6,7)-9 тактов

                                  но у моего метода есть одно крайне важное преимущество -
                                  им можно довльно просто делить > чем 32 битные числа на 3 на 32-разрядных регистрах, а вот через умножение так не выйдет

                                  >только если двоичное разложение множителя содержит не более n единиц
                                  >Поэтому ПИ ляпнул не подумав:

                                  в общем тут ты прав.
                                  Ответить
            • у меня родился вопрос: а если чисел будет 3, 5,7,11...причем точно неизвестно заранее - как будем оптимизировать? юзать многоядерные процы с различной арифметикой?
              Ответить
              • «Арифметические операции над целыми числами и полиномами целесообразно изучать вместе потому, что многие алгоритмы, работающие с целыми числами, по существу совпадают с алгоритмами, работающими с полиномами от одной переменной». А. Ахо, Дж. Хопкрофт, Дж. Ульман

                Как они предлагают умножать и обращать полиномы, а, следовательно, и числа, с помощью преобразований Фурье — просто жесть!
                Ответить
      • Сейчас это любой школьник знает, Люрик.
        Ответить
      • показать все, что скрытоvanished
        Ответить
    • А я на такой способ наткнулся:
      middle_price = round((middle_price + price)/2)

      Так в цикле считается среднее арифметическое нескольких чисел
      Ответить
      • Откуда автор знает про весовую функцию? Кстати, она в этом случае экспоненциальная, поэтому последнее значение решает всё!
        Ответить
      • я когда-то выводил такие формулы для подсчета статистики (средне, дисперсия) без таблицы всех значений
        Ответить
        • Имеете в виду
          middle_price = round((middle_price * (n - 1) + price)/n)
          ? Но это же другое дело! Множители (n - 1)/n и 1/n равны 1/2 только на одном шаге!
          Ответить
      • что характерно - опять пляски вокруг «middle» когда библиотечная функция считает «average»
        Ответить
    • Вообще чувак нашел не среднее арифметическое, а середину отрезка так сказать. Для 1 и 5 будет 3. Временами и мне надо подобное. Но судя по условиям задачи, чувак и правда в школе не учился:D
      Ответить
      • А разница?
        (1 + 5) / 2 = 3
        (5 - 1) / 2 + 1 = 3
        Ответить
        • если чо, гоеметрический смысл среднего арифметического - середина отрезка
          Ответить
          • а какой геометрический смысл среднего геометрического?
            сорри. я не мог этого не написать. вопрос риторический. ответ мне известен
            Ответить
            • Казалось бы, при чём здесь π?
              Ответить
              • ну вообще там для двух - окружность. а в общем случае когда n>2 толкование иное.

                а еще более в общем Среднее Колмогорова рулит
                Ответить
    • Какой долбоёб апнул этот тред?
      Ответить

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