September 29th, 2017

TRON

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

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

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

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

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

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