Разница между sqrt (x) и pow (x, 0.5)

Мне было интересно, почему есть функция sqrt () в C / c ++, поскольку мы можем добиться того же, используя

pow(x,0.5);

как sqrt(x) отличается для pow(x,0.5) , Есть ли конкретная причина наличия функции sqrt?

8

Решение

Я провел тест для вас, чтобы проверить производительность 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 секунд на моем компьютере. Так что производительность намного лучше. Как уже упоминалось, читаемость является другой причиной.

11

Другие решения

Конечно, если вы думаете только о математической эквивалентности …

Но с точки зрения алгоритмов для вычисления результата, sqrt специфичен для одной вещи, тогда как pow является общим.

Таким образом, вы можете (правильно) предположить, что можно написать более быструю функцию для sqrt чем написать общий pow функция.

5

Я помню, как читал где-то, что sqrt () является особым случаем, который гарантируется в спецификации IEEE для правильного округления. Я посмотрю это, чтобы найти источник. Это должно быть немного быстрее, потому что он должен обрабатывать только один случай.

Даже если бы они были одинаковыми, было бы неплохо иметь встроенный псевдоним для часто используемой функции!

Редактирование: в соответствии с IEEE-754 предполагается, что функция pow () и sqrt () должны быть реализованы таким образом, чтобы округленное значение было максимально приближенным к действительному представлению с плавающей запятой. Однако sqrt () все равно должен быть быстрее.

5
По вопросам рекламы [email protected]