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

    0

    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
    16. 16
    std::size_t fib(const std::size_t index) {
      if (index < 3)
        return !!index;
    
      std::size_t  f2 = 1; // f(n - 2)
      std::size_t  f1 = 1; // f(n - 1)
      std::size_t result = 0;
      for (std::size_t i = 2; i < index; ++i)
      {
        result = f1 + f2;
        f1 = f2;
        f2 = result;
      }
    
      return result;
    }

    Что Clang вытворяет с несчастной функцией Фибоначчи?
    https://godbolt.org/z/2SFUm0

    Запостил: Elvenfighter, 10 Октября 2018

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

    • Не то что GCC: https://godbolt.org/z/ROWBNv
      Ответить
      • Ничего не понял. Поэтому я за "PHP". И влепил минус бляди.
        Ответить
        • Выучи assembler (Intel x86), будешь понимать
          Ответить
          • "PHP" работает не только на "Intel x86". Его можно собрать на "Solaris", "Linux", "OpenBSD" и на прочих "Unix"-подобных системах на любом процессоре. Именно поэтому я за "PHP".
            Ответить
            • >>PHP" работает не только на "Intel x86". Его можно собрать на "Solaris", "Linux", "OpenBSD"

              а так же "AMD", ".NET", "Oracle", XBOX, Windows...
              Ответить
              • Кстати, какой компьютер лучше: "Windows" или "Pentium"? Мне нужно, чтобы с жидкокристаллическим "Word"ом было.
                Ответить
                • Лучше всего PHP, на нем Дуров сделал свое состояние!
                  Ответить
                  • Без сарказма, заметим. "PHP" удобен тем, что, в отличие от требущих влажно-командной работы "Java" и "Python", на нём можно программировать воднером весьма и весьма годненькие проекты, в то время, как вам, даунам, требуются "тимлиды", тестеры (ибо чуть что - "Java" тут же потечёт памятью) и прочий помойный сброд.
                    Ответить
                    • еще им нужны дебагеры, профайлеры, IDE, континиус интегрейшен, юнит тесты, вершен контроль, документация, API, и черта лысого вступе

                      зачем? Ведь в Notepad++ на PHP можно в одиночку написать любой сайт без всего этого
                      Ответить
            • Ты предлагаешь гOBHY учить ассемблеры всех этих платформ? Он же потухнет.
              Ответить
    • Да это восстание машин...

      С -O1 чуть получше.
      Ответить
    • Царский анролл...
      Ответить
    • return n <= 2 ? !!n : fib(n - 1) + fib(n-2);
      Ответить
      • Ко-ко-ко рекурсия, причем ветвлящаяся
        Ответить
        • Вспомнил, как преподы, воспитанные на старом Фортране (который не использовал стек и не умел рекурсивно вызывать функции; новый-то умеет, у него ABI как у сишки), били по рукам за рекурсивные вызовы: «Ко-ко-ко, так нельзя! Функция не может вызвать сама себя!»
          Ответить
        • Кстати, ветвление — это жопа. Потеря пирфоманса из-за того, что fib каждого номера, кроме последнего, будет вычисляться несколько раз.

          Нужно в области глобальных переменных завести кэш для значений этой функции, чтобы не вычислять повторно.
          Ответить
          • int fib_cache[100500];
            
            int fib(int n) {
                return fib_cache[n] ? fib_cache[n] : fib_cache[n] = (n <= 2 ? !!n : fib(n - 1) + fib(n-2)); 
            }
            Ответить
            • Даже конпелируется во что-то вменяемое:
              https://godbolt.org/z/Sj4xpB
              Ответить

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