c ++或c pow给出了错误的结果

use*_*876 1 c++ math

即时通讯尝试制作自己的战队,但结果却是错误的

我得到:2 ^ 3.3 = 16,这是错误的......为什么?

#include <iostream>

using namespace std;

double new_pow(double base, double power){

double result = 1;

for(int i = 0; i <= power; i++) {
    result *= base;
}


    return result;
}



int main (int argc, char * const argv[]) {

    std::cout << new_pow(2,3.3) << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请帮我找一下这个bug

Ign*_*ams 5

错误是你的循环运行4次,因为4次迭代不会超过3.3次.这就是浮点指数用对数实现的原因,而不是重复乘法.

  • 哇靠.阅读链接. (4认同)
  • 不,你应该使用[logarithms](http://en.wikipedia.org/wiki/Exponentiation#Powers_via_logarithms)而不是迭代. (3认同)
  • 你以前没有听说过'exp()`吗? (3认同)
  • @Pavan:提问者从未声称无法访问libm,只是说他们"试图自己动手". (2认同)