gpt4 book ai didi

我可以使用这个自定义函数替换内置的 pow 函数吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:26:24 24 4
gpt4 key购买 nike

我试图在不调用 pow() 的情况下用 c 编写幂函数。

double power (double X, int Y)
{
int i;
double value = 1;
for (i = 0; i < Y; i++)

value *= X;

return value;
}

我的问题是,您是否有任何理由可以看出此函数无法在任何给定的测试值下正常工作?我试图涵盖所有输入可能性。

-谢谢

最佳答案

由于以下几个原因,此功能不足:

  • 有问题。请注意,value 被声明为 int 而不是 double,这意味着如果您尝试计算 power(1.5, 1 ),你会得到 1 而不是 1.5。事实上,几乎所有的输入都是错误的。

  • 它不处理负指数。尝试计算 power(2, -1)。正确答案是 0.5,但您的函数(修复上述 int 错误后)将返回 1 而不是 0.5。您可以很容易地解决这个问题(例如,您可以计算 power(2, 1) 然后取倒数),但按照目前的写法,这很麻烦。

  • 它很慢。当幂为整数时,大多数求幂是使用称为 exponentiation by squaring 的算法计算的。 ,这比您的代码快得多。与您的代码进行的 Θ(Y) 乘法相比,通过平方求幂将进行 Θ(log Y) 乘法。您的函数完成所需的时间将呈指数增长。

  • 它不处理小数指数。尝试计算 power(1.5, 1.5)。您会得到错误的答案,因为指数是 int,而不是 double。纠正这个并不容易;在 Stack Overflow 上搜索有关如何正确实现此功能的其他问题。

  • 它重新发明了轮子。从根本上讲,您应该问自己为什么要重写该语言的数学库提供给您的函数。这可能会在程序中引入错误或效率低下(请参阅前面的要点),最终您还没有增加功能。

希望这对您有所帮助!

关于我可以使用这个自定义函数替换内置的 pow 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19485944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com