2017-11-11 76 views
0

我想知道如何使双打对权力的功能,而不math.h中功能的双电源没有math.h中

例如,如果我想

4.3^2.5 
+0

定义你自己的函数来寻找双倍的力量。找出预定义的pow()如何工作和分析。 – achal

+2

我相信有几个算法可以做到这一点。你有什么尝试?你的尝试是如何工作的?还是不行?也许你应该花一些时间[阅读如何提出好问题](http://stackoverflow.com/help/how-to-ask),并学习如何创建[最小,完整和可验证示例](http ://stackoverflow.com/help/mcve)?也许你需要[学习如何调试你的程序](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)? –

+1

[浮点实现pow()函数的最有效方式]的可能重复(https://stackoverflow.com/questions/2664445/the-most-efficient-way-of-implementing-pow-function-in-浮点数) – OznOg

回答

-2
int main(){ 
    int a,b,i,pow=1; 
    scanf("%d %d",&a,&b); 
    for(i=1;i<=b;i++) 
    pow=pow*a; 
    printf("%d",pow); 
} 

变化你的数据类型根据你的需要

+0

以“4.3^2.5”为例,即使在我们声明b为double之后,我们也可以根据你的说法使用for(i = 1; i <= b; i ++)迭代(对于'i'分别等于1和2)给出输出“4.3^2”,这将是不正确的。 –

1

这是一个粗略的概要。

pow(x, y)在数学上等同于exp(log(x)*y),区别和特殊情况除外。可以用系列来近似log(x)exp(x)

泰勒级数可以从零开始计算。高级实现使用事先为特定情况预先设计的极小极大多项式的变体。

通常,在计算log时,我们将参数的指数部分与小数部分分开,然后使用多项式近似对数,然后为指数部分加上对数。

计算exp时,我们将整数和小数部分分开,并乘以它们中的每一个的exp

对于使用基数为2的浮点数,通常使用基数为2的对数和指数。然后指数e(代表2 e)的对数简单地是e

因为当你这样做时,你想操纵浮点值的指数部分和有效部分,你必须访问它们的编码。 math.h为此提供例如frexpldexp的例程。要做到这一点没有math.h,你需要访问对象的字节,这是另一个堆栈溢出问题的主题。

创建大致正确版本的pow并不难。计算错误和证明它们的界限需要大量的工作,并且设计多项式和其他计算以减少错误通常是困难的。