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

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

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

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

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

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

"Умный дом, умный телевизор, умный телефон, умные часы... кажется, я тут уже лишний" (с)
Subscribe
  • 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