Есть несколько проблем с вашими тестами.Во-первых, ваш тест включает в себя потенциально дорогой бросок от int до float.Если вы хотите знать, сколько стоит квадратный корень, вам следует тестировать квадратные корни, а не преобразования типов данных.
Во-вторых, весь ваш тест может быть (и равен ) оптимизирован компилятором, посколькуу него нет видимых побочных эффектов.Вы не используете возвращаемое значение (или храните его в энергозависимой ячейке памяти), поэтому компилятор видит, что может пропустить все это .
Подсказка в том, что вы имелиотключить оптимизации.Это означает, что ваш код тестирования не работает.Никогда никогда не отключайте оптимизацию при тестировании.Вы хотите знать, какая версия работает быстрее всего, поэтому вам следует протестировать ее в условиях, при которых она будет фактически использоваться.Если бы вы использовали квадратные корни в чувствительном к производительности коде, вы бы включили оптимизацию, поэтому то, как она ведет себя без оптимизаций, совершенно не имеет значения.
Кроме того, вы не сравниваете затратывычисления квадратного корня, но обратного квадратного корня .Если вы хотите узнать, какой способ вычисления квадратного корня является самым быстрым, вам нужно переместить деление 1.0/...
до версии Quake.(А поскольку деление - довольно дорогая операция, это может сильно повлиять на ваши результаты)
Наконец, стоит отметить, что небольшая хитрость Carmacks была разработана для быстрой работы на 12-летних компьютерах.Как только вы исправите свой эталонный тест, вы, вероятно, обнаружите, что он больше не является оптимизацией, потому что современные процессоры намного быстрее вычисляют «настоящие» квадратные корни.