1. C# / Говнокод #3621

    +102

    1. 1
    2. 2
    3. 3
    long First = 2* ... ;
    long Second = 2* ... ;
    long Average = (First + Second) / 2

    1.як не треба рахувати середнє арифметичне.
    2.БАЯН.

    Запостил: O_O, 02 Июля 2010

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

    • Лол, а что, в System.Math нет ли ничо?
      Ответить
    • Вопрос: как в .net'е сделать подобное:

      public static T GetMean<T>(params T[] values) where T: IAddable<T>, IDividable<T>
              {
                  T acc = default(T);
                  foreach (var value in values)
                      acc += value;
      
                  return acc / values.Length;
              }


      ?
      Ответить
      • values.Aggregate((f,s)=>f+s)/values.Length.
        Ответить
        • Получается, нельзя никак обобщить number'ы допустим на операторы сложения? Как-то ограниченно :(
          Ответить
        • Хочется иметь так:

          int f = GetMean<int>(1, 2, 3);
          float t = GetMean<float>(1.0f, 2.5f, 3.7f);
          Ответить
          • Набор перегруженных функций, благо примитивов всего ничего.
            Ответить
    • ХЗ, чего там в многоточиях, но:
      long Average = ... + ...;
      Ответить
    • читав, що 95% програмістів не бачать з першого разу проблем в цьому коді ...
      Ответить
      • А в чим проблема?
        Ответить
        • ги-ги
          При сумі може відбутися переповнення верхнього чи нижнього діапазону для long і тоді середнє значення порахується неправильно !!
          для прикладу, First = long.MaxValue - 2 and Second = long.MaxValue - 2
          Ответить
          • Все одно, треба контекст. Може по логицi First * Second улазять в long, а тип у них зроблен long'ом, щоби зайвий раз не кастувати int -> long...
            Ответить
          • Average = (First / 2) + (Second / 2) + ((First % 2) + (Second % 2))/2;
            Добре?
            Ответить
      • чому?

        проблема в том, що не треба множить и потом делить на 2
        Ответить
        • А якщо пiсля цього куска First та Second використуються десь далi по коду? Ради сумнівной оптимiзацii'' перетворювати код у спагетти?

          long First = ... ;
          long Second = ... ;
          long Average = (First + Second);
          
          First *= 2;
          Second *= 2;
          
          var Third = First + Second;
          
          ...


          Контексту мало
          Ответить
    • - Что, правда в глаза колет? Я хоть не скрываю от всех, - с ещё большим ехидством заметила Инга.
      Ответить

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