мне было интересно, почему существует SQRT() в C/C++, как мы можем достичь того же с помощьюРазница между SQRT (х) и мощн (х, 0,5)
pow(x,0.5);
, как это sqrt(x)
отличается для pow(x,0.5)
, Есть ли конкретная причина наличия функции sqrt?
мне было интересно, почему существует SQRT() в C/C++, как мы можем достичь того же с помощьюРазница между SQRT (х) и мощн (х, 0,5)
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-й один заняло около 2 секунд на моем компьютере. Таким образом, производительность намного лучше. Как уже упоминалось, читаемость является другой причиной.
Я получил противоположные результаты ... –
Я фактически проверил тест 3 раза, чтобы убедиться. У меня не было большой вариации. Пожалуйста, проверьте еще раз. – banarun
[Проверить его] (http://ideone.com/dlwLGR). –
Конечно, если вы думаете только математической эквивалентности ...
Но с точки зрения алгоритмов для вычисления результата, sqrt
специфичен к одной вещи, тогда как pow
является общим.
Таким образом, вы могли (справедливо) предположить, что возможно написать более быструю функцию для sqrt
, чем написать общую функцию pow
.
Я помню, где-то читал, что sqrt() - это особый случай, который гарантируется правильной округлением спецификации IEEE. Я посмотрю, что найти источник. Он должен быть немного быстрее, потому что он должен обрабатывать только один случай.
Даже если они были одинаковыми, приятно иметь встроенный псевдоним для часто используемой функции!
Редакция: В соответствии с IEEE-754 предполагается, что как функция pow(), так и sqrt() должны быть реализованы таким образом, чтобы округленное значение представляло собой самое близкое возможное представление с плавающей запятой к реальному значению. Однако sqrt() должен быть быстрее.
См. Http://stackoverflow.com/questions/22259537/ –
Я не думаю, что для этого есть особая причина. Поскольку операция с квадратным корнем очень распространена, а 'sqrt (x)' улучшает читаемость по сравнению с 'pow()'. – GeekFactory
Почему есть велосипед, когда есть велосипед? –
Почему у нас есть умножение, когда вы можете просто добавить в цикл? –