#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double x,y,z;
cin>>x>>y;
z=exp(y*log(x));
cout<<z;
system("pause");
return 0;
}
这是找到指数为浮点数的数字的幂的代码,即2.3 ^ 2.3如果我们使用日志和反对数我们可以很容易地得到答案但是我的面试问题是找不到使用任何数学库的权力C ++。我用Google搜索并且无法理解谷歌的一些参考资料。
答案 0 :(得分:2)
您可以随时自行实施exp()
和log()
。
实际实现2 x 和log 2 x更容易,并且使用与exp()
和log()
相同的方式
2 x = 2 integer_part(x)+ fractional_part(x) = 2 integer_part(x) * 2 fractional_part( x)的
可以使用泰勒级数展开计算2 fractional_part(x) -1 <= x <= +。
然后乘以2 integer_part(x)相当于将浮点数的指数部分调整为integer_part(x),或者确实可以将2提升为integer_part(x)的整数幂并乘以那个。
同样,log 2 x = log 2 (x * 2 N ) - N
其中N(整数,2的幂)被选择为0.5 <= x * 2 N <= 1(或者,在1和2之间)。
再次选择N后,我们可以使用泰勒级数展开来计算log 2 (x * 2 N )。
这就是全部,只是一点点数学。
编辑:也可以使用近似多项式而不是泰勒级数,它们更有效。感谢Eric Postpischil的提醒。但是你可能需要一个数学参考来找到或构建它们。
答案 1 :(得分:0)
ln(x) = 2 * sum[ ((x-1)/(x+1))^(2n-1) / (2n-1), n=1..inf ]
= 2 [ (x-1)/(x+1) + (1/3)( (x-1)/(x+1) )^3 + (1/5)( (x-1)/(x+1) )^5 + (1/7) ( (x-1)/(x+1) )^7 + ... ]
e^x = sum( x^n / n!, n = 0 .. inf )
= 1/1 + x/1 + x^2 / 2 + x^3 / 6 + ...
您可以将积分功率实现为for循环,并继续扩展以获得所需的近似值。然后插入你的价值观,badda-bing,badda-boom。注意,上述的会聚区域对于x> 1。 0表示ln(x)和e ^ x的所有值。