我正在制作一个程序来取代math.h' pow()
函数。
我没有使用math.h中的任何函数。
问题是,我可以将权力计算为整数,如
15 -2
45.32 11
但我无法计算
我的程序首先找到整数幂x(x 2 )并乘以(x 0.132 )。
我知道x 0.132 是功率132的x的第1000个根但是我无法解决它。
如何找到x y (0< y< 1)
答案 0 :(得分:0)
要计算x ^ y
,0< y< 1:
y
作为合理分数,(a/b)
(最简单的方法:选择你想要的任何b
作为常数获得足够的准确度
然后使用:a = b * y
。)
b
的{{1}}根。 (最简单的方法:你知道它在y
和0
之间,可以很容易地判断给定的值是太低还是太高。所以请保持b
从零开始,min
从max
开始。反复尝试b
,看看它是否太大或太小,并调整(min + max) / 2
或{{ 1}}恰当。重复直到min
和max
几乎相同。)
min
权力。(可能通过反复相乘它。如果你愿意,可以优化它。例如,max
可以只用两次乘法计算,一次找a
,然后一次取平方。很容易概括。)
答案 1 :(得分:0)
使用浮点格式固有的分解将x=2^e*m
与1<=m<2
分开,以创建子问题2^(e*y)
和m^y
使用平方根x^y=sqrt(x)^(2*y)
,如果2*b
中有整数部分,请将其拆分。
使用x
接近1
的二项式定理,这将在迭代平方根时出现。
(1+h)^y=1+y*h+(y*(y-1))/2*h^2+...+binom(y,j)*h^j+...
从一个词到下一个词的商是(y-j)/(j+1)*h
h=x-1;
term = y*h;
sum = 1+term;
j=1;
while(1+term !=1) {
term *= h*(y-j)/(1+j);
sum += term;
j+=1;
}