“std::p ow(double, int)”比“std::p ow(double, double)”快吗?如果是,快

Is `std::pow(double, int)` faster than `std::pow(double, double)`? if yes, how much faster?

本文关键字:double std ow 如果 int 快吗      更新时间:2023-10-16

我看到了这个关于std::pow的老问题:什么更有效率?使用 pow 进行平方还是只是将其与自身相乘?

老问题提到std::pow有一个std::pow(double, int)的变体,一些用户说这个版本可能更快。

std::pow(double, int)std::pow(double, double)快吗? 如果是,快多少?

附言标准样板免责声明关于"我已经知道过早优化是邪恶的,但我出于学术目的提出这个优化问题,或者我已经将那行/代码块确定为瓶颈">

期望:

std::p ow(double, int( 是 log(n( 运行时的对数减少循环。

std::p ow(double x, double y( { exp(log(x( * y(; }

应该很接近。

<小时 />

来自评论:

  • en.cppreference.com/w/cpp/numeric/math/pow (7(自C++11以来,"如果任何参数具有整数类型,则将其转换为双精度"。 – Bob__ 四月 11 '18 在 20:10
  • 我对这种说法的解释(我可能是错的,库实现者可能不同意(是,在 C++11 之前,它们可能有不同的实现,但从 C++11 开始,它们应该共享相同的,而参数只是简单地强制转换。 – Bob__ 四月 11 '18 在 20:25
相关文章: