use*_*374 2 c algorithm math exponent
我试图在c中写一个幂函数而不调用pow().
double power (double X, int Y)
{
int i;
double value = 1;
for (i = 0; i < Y; i++)
value *= X;
return value;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,是否有任何理由可以看出这个函数在任何给定的测试值下都无法正常工作?我试图涵盖所有输入的可能性.
-谢谢
tem*_*def 13
由于以下几个原因,此功能不足:
这是马车.请注意,value声明为a int而不是a double,这意味着如果您尝试计算power(1.5, 1),则会返回1而不是1.5.事实上,几乎所有输入都是错误的.
它不处理负指数.尝试计算power(2, -1).正确的答案是0.5,但你的功能(修复int上面提到的错误后)将返回1而不是0.5.你可以很容易地解决这个问题(你可以,例如,计算power(2, 1),然后采取倒数),但它现在写的很麻烦.
这很慢.当幂是整数时,大多数取幂是使用称为取幂的算法通过平方计算的,这比你的代码要快得多.与代码所做的Θ(Y)乘法相比,通过平方的指数将进行Θ(log Y)乘法.您的功能完成需要指数级的时间.
它不处理小数指数.尝试计算power(1.5, 1.5).你会得到错误的答案,因为指数是一个int,而不是一个double.纠正这一点并不容易; 在Stack Overflow上搜索有关如何正确实现此问题的其他问题.
它重新发明了轮子.从根本上讲,你应该问问自己为什么要重写语言数学库提供给你的函数.这可能会在程序中引入错误或效率低下(参见前面的要点),并且在一天结束时您还没有增加功能.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
1803 次 |
| 最近记录: |