c++ - 如何自己编写幂函数?

我一直想知道如何自己制作一个计算功率的函数(例如 23)。在大多数语言中,这些都包含在标准库中,主要是 pow(double x, double y),但是我自己怎么写呢?

我在考虑 for 循环,但它认为我的大脑陷入了循环(当我想用非整数指数做幂时,比如 54.5 或否定 2-21) 我疯了 ;)

那么,我该如何编写一个计算实数幂的函数呢?谢谢


哦,也许需要注意的是:我不能使用使用幂的函数(例如 exp),这将使它最终无用。

最佳答案

负幂不是问题,它们只是正幂的倒数 (1/x)。

浮点幂只是稍微复杂一点;如您所知,分数幂等价于根(例如 x^(1/2) == sqrt(x)),并且您还知道,具有相同底数的幂等于将其相加指数。

通过以上所有内容,您可以:

  • Decompose the exponent in a integer part and a rational part .
  • 使用循环计算整数幂(您可以将其优化为因子分解并重复使用部分计算)。
  • 使用您喜欢的任何算法计算根(任何迭代近似,如二分法或牛顿法都可以)。
  • 将结果相乘。
  • 如果指数为负,则应用倒数。

例子:

2^(-3.5) = (2^3 * 2^(1/2)))^-1 = 1 / (2*2*2 * sqrt(2))

https://stackoverflow.com/questions/2882706/

相关文章:

c++ - 私有(private)构造函数

c++ - 不允许指向不完整类类型的指针

c++ - C++ 中的常量和编译器优化

c++ - 在没有实例的情况下获取 std::array 的大小

c++ - 如何以编程方式确定表达式在 C++ 中是右值还是左值?

c++ - 字符串文字中的符号\0 是什么意思?

c++ - 为什么要使用断言?

c++ - 是否可以防止对象的堆栈分配并只允许使用 'new' 对其进行实例化?

c++ - C++ 中 *& 和 **& 的含义

c++ - 三向比较运算符与减法有何不同?