ДействиеСценарий / Говнокод #4221 Ссылка на оригинал

0

  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 TarasB, (Updated )

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

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

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

          Код недостаточно индусский. Надо предложить такую же формулу для среднего гармонического и решать методом Ньютона как нелинейное уравнение.
          Ответить
      • после 30 км/ч геометрия Евклида становится комментариями...
        геометрия Римана начинает рулить...
        на втором круге её обходит геометрия Лобачевского...
        Ответить
    • машина ездит по кругу, так что СТО не катит, надо пользоваться ОТО.
      Ответить
    • А ведь похоже на то! Но только зачем min и max? (X - Y) / 2 + Y не пройдёт? Или боязнь отрицательных чисел? Кстати, если X и Y имеют разные знаки, то этот алгоритм может вызвать переполнение, а обычный (X + Y) — нет!
      Ответить
      • взялся решать задачу по физике пятого класса, не зная арифметики из программы четвертого. конец немного предсказуем.
        Ответить
      • П.С. Должно быть (X + Y) / 2, а то, что написано в последней строке — для запутывания врагов.
        Ответить
  • М-де, переход в систему отсчета, связанную с автомобилем должен помочь. Преобразования Лоренца не катят, т.к. машина ездит по кругу, а значит ее система отсчета неинерциальна + у нее скорость меняется после первого круга.
    Ответить
  • А скорость средняя путевая или средняя векторная? Если средняя векторная, то круг незамкнут!
    Ответить
    • Там на форуме TarasB намекнул что (x + y) * 0.5 - лучше будет...
      Ответить
        • так... ждём что скажет КЭП ( он же 7-метилгуанозин, соединенный 5`-атомом углерода через три остатка фосфорной кислоты к 5`-атому углерода рибозы на 5'-конце молекулы мРНК )
          Ответить
    • В вещественных — да. А если кого-то интересует в целых, то нужно ещё вспомнить про остатки, то есть добавить к результату ((x & 1) + (y & 1)) / 2.
      Ответить
        • Конечно, делить на 2 будем сдвигом вправо! А если нужно ср. арифметическое трёх чисел, то достанем троичные компы.
          Ответить
          • чем не устраивает true, false и null в убогих языках которые ЭТО поддерживають?
            Ответить
            • Если мы считаем ср. арифметическое трёх чисел, то для оптимизации деления на три сдвигом потребуется троичная арифметика. А про среднее арифметическое пяти чисел лучше не говорить!
              Ответить
                • Радует то, что для ср. арифметического десяти чисел годятся BCD — двоично-десятичные числа.
                  Ответить
              • всякие там бозоны и нейтрино просто в ауте валяются...
                Ответить
              • что нам... мы и пространство перестроим - дай только нам троичную логику...
                --
                🙂
                Ответить
              • >>для оптимизации деления на три сдвигом потребуется троичная арифметика.

                не потребуется. сказал бы, но тред уже заглох
                Ответить
                • * 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...причем точно неизвестно заранее - как будем оптимизировать? юзать многоядерные процы с различной арифметикой?
            Ответить
            • «Арифметические операции над целыми числами и полиномами целесообразно изучать вместе потому, что многие алгоритмы, работающие с целыми числами, по существу совпадают с алгоритмами, работающими с полиномами от одной переменной». А. Ахо, Дж. Хопкрофт, Дж. Ульман

              Как они предлагают умножать и обращать полиномы, а, следовательно, и числа, с помощью преобразований Фурье — просто жесть!
              Ответить
  • А я на такой способ наткнулся:
    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
    Ответить
      • если чо, гоеметрический смысл среднего арифметического - середина отрезка
        Ответить
        • а какой геометрический смысл среднего геометрического?
          сорри. я не мог этого не написать. вопрос риторический. ответ мне известен
          Ответить
            • ну вообще там для двух - окружность. а в общем случае когда n>2 толкование иное.

              а еще более в общем Среднее Колмогорова рулит
              Ответить

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

Из-за тебя ушел bormand, guest!

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


    8