Унарный оператор в C или C ++ для второй степени числа

Учитывая double x, известно, что это более эффективно использовать x*x вместо pow(x,2), Представьте для простоты, что мы должны вычислить квадратный корень из x: поскольку это унарная операция, для этого у нас есть sqrt(x), Теперь также поднимая x ко второй власти это унарная операция, но мы ничего подобного (насколько я знаю) pow2(x),

Я реализовал свой собственный pow2 как:

inline double pow2(double a){return a*a;}

который должен быть еще лучше, чем pow(a,2), но это основано на * оператор, который не является унарным.
Как реализовать подлинную унарную реализацию pow2? Будет ли это самый эффективный способ получить вторую степень double?

ПРИМЕЧАНИЕ: я осознаю тот факт, что каждая действительная сила положительного действительного числа является унарной операцией и что бессмысленно определять бесконечное число pow2, pow3, pow3.14… с практической точки зрения я очень доволен pow(double, double),

-1

Решение

«это более эффективно использовать x*x вместо pow(x,2)»

Не конечно Больше эффективный. Это может быть то же самое. С позволяет анализировать способность таких функций, как pow() и оба могут испустить один и тот же код.

Компилятор может не анализировать ваши pow2() и создать неоптимальный код по сравнению с pow(a,2),

Если это действительно так, профилируйте свой код. Еще что Лучший на одной платформе могут отличаться на других.

Как реализовать настоящую унарную реализацию pow2?

inline double pow2(double a){return a*a;} все в порядке.

Будет ли это самый эффективный способ получить вторую силу двойника?

«самый эффективный» -> я предлагаю не использовать функцию, просто x*x,


Также обратите внимание, что C позволяет FP оценивать с более высокой точностью, что требуется. Исследование FLT_EVL_METHOD. Цель для наиболее эффективный способ получить вторую двойную степень с функцией может победить общую производительность.

2

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

Других решений пока нет …

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