Дмитрий Радищев (dibr) wrote,
Дмитрий Радищев
dibr

Category:

и ещё про оптимизацию

И ещё про оптимизацию понравилось. Перескажу своими словами.

Есть у нас, например, массив. Из четырёх элементов типа float (обычные числа). И хотим мы проверить, нет ли среди них такого, косинус которого больше единицы. Заводим флажок, заносим в него false, делаем цикл от нуля до четырёх включительно, "если косинус x[i] больше единицы то флажок = true", выводим значение флажка.
Получаем (в случае глубоко оптимизирующего компилятора) true.

Но как?! Косинус чего оказался больше единицы??

А очень просто. "Цикл от нуля до четырёх включительно" - это ошибка "выход за границы массива", потому что заметает пять элементов, а не четыре. "Выход за границы" - это "неопределенное значение", а любую формулу, включающую неопределённое значение, можно не считать, а просто брать такое значение, при котором код выполнится быстрее.
А быстрее всего - выкинуть вообще всё, включая весь цикл и сам флажок, и просто вывести "true". Потому что компилятор имеет право считать что косинус (неопределенного) "пятого элемента" больше единицы, а в этом случае "true" выведется при любых значениях элементов массива.

"Умный дом, умный телевизор, умный телефон, умные часы... кажется, я тут уже лишний" (с)
Subscribe

  • 007

    Сходили таки на последнего Бонда. Неплохо так, значительно лучше чем предыдущий ("спектр"), из тех что с Крейгом наверное на уровне "скайфолла". Я…

  • мы все под колпаком у колобков!

    Сегодня я узнал, что "шефа" (старшего Колобка в м/ф "следствие ведут Колобки") озвучивал Леонид Броневой - ну то есть Мюллер из "семнадцати мгновений…

  • трейдеры!

    Есть кое-что, что меня больше всего умиляет в текущей ситуации с ценами на газ в Европе (кто не в курсе - не так давно они выросли в несколько раз, и…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 45 comments

  • 007

    Сходили таки на последнего Бонда. Неплохо так, значительно лучше чем предыдущий ("спектр"), из тех что с Крейгом наверное на уровне "скайфолла". Я…

  • мы все под колпаком у колобков!

    Сегодня я узнал, что "шефа" (старшего Колобка в м/ф "следствие ведут Колобки") озвучивал Леонид Броневой - ну то есть Мюллер из "семнадцати мгновений…

  • трейдеры!

    Есть кое-что, что меня больше всего умиляет в текущей ситуации с ценами на газ в Европе (кто не в курсе - не так давно они выросли в несколько раз, и…