繁体   English   中英

找到实数的力量

[英]Find power of real number

我试图找到x^y ,其中x是正数,y是实数。 有许多在线资源可以找到整数,但实际数字并不多。

例:

6 ^ 4.3 = 2218.4537377949778046576946747662

我不应该使用任何数学库。 我知道这有效:

exp(y*log(x))

但我必须在没有任何库的情况下找到exp。 有没有我可以使用的系列来获得实数? 我是用Java做的。

指数的整数部分很容易通过重复平方来处理。

对于小数部分,您可以使用二进制表示并使用由Heron方法计算的平方根( x^0.1b=sqrt(x)x^0.01b=sqrt(sqrt(x)) ...)。

4.3 = 4 + 1/4 + 1/32 + 1/64 + 1/512...

然后

6^4=1296

并通过Heron的迭代

6^(1/2) = 3.5
6^(1/2) = 2.60714285714
6^(1/2) = 2.45425636008
6^(1/2) = 2.44949437161
6^(1/2) = 2.44948974279
6^(1/2) = 2.44948974278
6^(1/2) = 2.44948974278

6^(1/4) = 1.72474487139
6^(1/4) = 1.57247448714
6^(1/4) = 1.56510194466
6^(1/4) = 1.56508458017
6^(1/4) = 1.56508458007
6^(1/4) = 1.56508458007

6^(1/8) = 1.28254229004
6^(1/8) = 1.25142045246
6^(1/8) = 1.25103346471
6^(1/8) = 1.25103340486
6^(1/8) = 1.25103340486
6^(1/8) = 1.25103340486

6^(1/16) = 1.12551670243
6^(1/16) = 1.11851794241
6^(1/16) = 1.11849604619
6^(1/16) = 1.11849604597
6^(1/16) = 1.11849604597

6^(1/32) = 1.05924802299
6^(1/32) = 1.0575910323
6^(1/32) = 1.05758973424
6^(1/32) = 1.05758973424
6^(1/32) = 1.05758973424

6^(1/64) = 1.02879486712
6^(1/64) = 1.02839189837
6^(1/64) = 1.02839181942
6^(1/64) = 1.02839181942
6^(1/64) = 1.02839181942

6^(1/128) = 1.01419590971
6^(1/128) = 1.01409655817
6^(1/128) = 1.0140965533
6^(1/128) = 1.0140965533

6^(1/256) = 1.00704827665
6^(1/256) = 1.0070236114
6^(1/256) = 1.00702361109
6^(1/256) = 1.00702361109

6^(1/512) = 1.00351180555
6^(1/512) = 1.00350566074
6^(1/512) = 1.00350566072
6^(1/512) = 1.00350566072 

最后,

6^4.3 = 1296 * 1.56508458007 * 1.05758973424 * 1.02839181942 * 1.00351180555 ... 
      = 2218.45373705

这种方法不是最优的,它不会很快收敛并且不是很准确,但实现起来相当简单。

为了在效率和易于实现之间做出妥协,您可以使用Taylor扩展开发自己的pow函数exp(y.ln(x))

“最难”的部分是对数。

首先通过求出2的幂来对x进行归一化,使得x=(2^n).x' ,其中1<=x'<2 然后ln(x) = n.ln(2) + ln(x')

6 = (2^2) x 1.5

通过反双曲正切系列评估ln(x') = 2 argth((x'-1) / (x'+1))

ln(1.5) = 2 (0.2 + 0.2^3/3 + 0.2^5/5...) = 
0.4
0.405333333333
0.405461333333
0.405464990476
0.405465104254
0.405465107978
0.405465108104
0.405465108108
...

ln(6) = 2 x 0.69314718056 + 0.405465108108 = 1.791759469228

然后计算y.ln(x) ,分成整数部分(通过平方使用指数)和小数部分。

4.3 x 1.791759469228 = 7.704565717681

e^7 = 1096.633158428

对于小数部分,使用指数的标准泰勒发展。

e^0.704565717681 = 1 + 0.704565717681 + 0.704565717681^2/2 + 0.704565717681^3/6...
1
1.70456571768
1.95277214295
2.01106472233
2.02133246059
2.02277931986
2.0229492211
2.02296632204
2.02296782814
2.02296794604
2.02296795435
2.02296795488
2.02296795491
...

并且倍增

6^4.3 = 1096.633158428 x 2.02296795491 = 2218.45373779

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM