我看到参数可能都是双倍的
但是对于像
这样的代码 printf("%lf\n",pow(-32,0.2));
return 0;
输出为
显然是错的
我已阅读 https://stackoverflow.com/questions/22583740/how-to-implement-a-pow-function-in-python-for-float-as-well-as-negative-numbers,但无法将其设为浮动负数。
那么关于如何实现支持负浮点数的pow函数的任何建议?
我知道对于pow(双x,双n),如果x
为负,则执行pow(-x,n)
,并在返回值之前检查n
。
以pow(-32,0.2)
为例,首先我转到pow(32,0.2)
并获取2
,然后检查n
,在这种情况下为0.2。我发现0.2,又名1/5,是一个“奇数”,所以我否定了答案然后返回-2
这是解决问题的可能方法吗?
[编辑]
我知道答案可能不是单一的,但我希望我能得到一个浮点数作为答案,如果它有一个。
答案 0 :(得分:1)
负数的根源
您正在查看复数,here is a primer以及可以使用的示例实现您自己的函数 - 请查看this SO question;或者您可以切换到c ++并使用<complex>
创建自己的库,可以从c。
替代方案,基于评论:
如果你这样做会不起作用:
long double mypow(long double v, long double p)
{
int sign=1;
long double r;
if (v<0)
{
sign = (-1);
v *= sign;
}
r = pow(v, p);
return (r*sign);
}
答案 1 :(得分:1)
将负数增加到非整数幂通常会导致数字帽不能表示为单个浮点数。在这个特定的情况下(-32 ** 0.2)它的答案是-2(-2 ** 5是-32),但在一般情况下你需要有一个返回复数的pow函数
答案 2 :(得分:1)
这是问题背后的一些数学:
我们有pow(x,y)
,其中x&lt; 0和y不是整数。
首先,让y = n+f
n
为整数且0<f<1
。 (由n = floor(y); f=y-n;
获得)
使用指数法则:
pow(x,y) = pow(x,n) * pow(x,f)
pow(x, f)
(x <0)是真实的,如果y
是有理数a/b
(写在最小的表单上,其中a
和b
没有具有奇数分母的共同质数除数(即,如果b
是奇数)。
在这些情况下,结果可以获得:
如果pow(-x,y)
是偶数,那么 a
如果-pow(-x,y)
是奇数,则a
在使用分数的所有其他情况下,结果并不真实。