Мне было интересно, почему есть функция sqrt () в C / c ++, поскольку мы можем добиться того же, используя
pow(x,0.5);
как sqrt(x)
отличается для pow(x,0.5)
, Есть ли конкретная причина наличия функции sqrt?
Я провел тест для вас, чтобы проверить производительность sqrt(x)
а также pow(x,0.5)
1.
for(int i=0;i<100000000;i++)
pow(double(i),0.5);
2.
for(int i=0;i<100000000;i++)
sqrt(double(i));
Первый занял около 20 секунд, а второй занял около 2 секунд на моем компьютере. Так что производительность намного лучше. Как уже упоминалось, читаемость является другой причиной.
Конечно, если вы думаете только о математической эквивалентности …
Но с точки зрения алгоритмов для вычисления результата, sqrt
специфичен для одной вещи, тогда как pow
является общим.
Таким образом, вы можете (правильно) предположить, что можно написать более быструю функцию для sqrt
чем написать общий pow
функция.
Я помню, как читал где-то, что sqrt () является особым случаем, который гарантируется в спецификации IEEE для правильного округления. Я посмотрю это, чтобы найти источник. Это должно быть немного быстрее, потому что он должен обрабатывать только один случай.
Даже если бы они были одинаковыми, было бы неплохо иметь встроенный псевдоним для часто используемой функции!
Редактирование: в соответствии с IEEE-754 предполагается, что функция pow () и sqrt () должны быть реализованы таким образом, чтобы округленное значение было максимально приближенным к действительному представлению с плавающей запятой. Однако sqrt () все равно должен быть быстрее.