?

Log in

No account? Create an account
dibr
 
[Most Recent Entries] [Calendar View] [Friends View]

Friday, September 29th, 2017

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

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

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

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

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

<< Previous Day 2017/09/29
[Calendar]
Next Day >>
My Website   About LiveJournal.com