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

    +126

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    FileStream fsSource = new FileStream(fileName, FileMode.Open, FileAccess.Read);
    
    byte[] b = new byte[8192];
    int[] a = new int[4096];
    
    fsSource.Read(b, 0, 8192);
    
    int sum=0;
    int elem;
    for (int i = 0; i < 4096; i++)
    {
    elem = b[i * 2] * 256 + b[i*2+1];
    a[i] = elem; //раз уж нам всё равно надо заполнять этот массив, то мы его заполним
    sum += elem;
    }

    задача: считать 2-х байтные числа с бинарного файла и посчитать его сумму.

    Запостил: slirx, 12 Июня 2011

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

    • > с бинарного файла
      Ответить
    • Видимо автор кода и не подозревает о BinaryReader и методе ReadInt16().
      зачем массив "а" не понятно вообще. к чему там формула? и зачем создавать переменную elem? работа цикла ужасающая. ко всему этому магические числа.
      Ответить
      • Переменная елем - для кеширования. Чтобы вместо sum+=a[i] писать sum+=elem. Ведь обращение к элементу масива очень долгое!
        Ответить
        • >Ведь обращение к элементу масива очень долгое!
          O(1) ваще-то.
          Ответить
          • http://www.youtube.com/watch?v=myFhO_RCndw
            Ответить
          • А я не про алгоритмическую сложность.
            Ответить
            • Тогда, наверное, разумнее было сказать "дольше, чем к переменной".
              Ответить
              • Все современные компиляторы уже давно делают expression elimination, так что "всё" давно кэшируется за "нас".

                Так что, Тарас, если дельфи не современный, то пиши на нормальных развиваемых языках.
                Ответить
                • кажется мне что TarasB в своем посте забыл тег irony
                  or i am wrong?
                  Ответить
              • мб дольше на время, чтобы к адресу на [0] прибавить смещение
                В любом случае, не быстрее, чем создание(хотя и быстрое) + инициализация новой переменной
                т.е. мысль Тараса, которую я посчитал иронией, без иронии. это gg
                Ответить
        • это ирония я надеюсь))
          Ответить
        • Какое кеширование??? Вы совсем уже долбанулись. Это ускорение ничтожно маленькое.
          Ответить
          • Привильно! Нужно остальной код писать, а не тупые придумывать условности!
            Ответить
    • >//раз уж нам всё равно надо заполнять этот массив, то мы его заполним
      Deal with it.
      Ответить
    • Это хорошо еще что он размер файла знает...
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить

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