我一直在寻找答案,但没有运气
我试图找到一个解决方案来执行以下操作,在PHP中精确到20个小数点
9999999999999999999999999 ^ 0.2222
在内置函数/ GMP / BC Math中没有帮助。在内置函数中,只是因为大小有限而失败。 GMP和BC数学不接受十进制指数。
我可以在stackoverflow中找出一些解释如何执行此操作的算法,但仅限于整数部分的准确性。
我甚至认为,除非我们想出一个破解这个的算法
,否则PHP是不可能的答案 0 :(得分:2)
我想我有办法。它取决于三个简单的观察结果:
sqrt
函数pow(x, a)
分成pow(x, int(a)) * fracpow(x, frac(a))
,其中pow
存在于BCMath库中,fracpow
是我们需要创建的函数(对于指数a
0到1之间)派系权力可以表示为多个平方根的乘积:
x^(0.22) = x^(1/8 + 1/16 + 1/32 + ...) = sqrt(sqrt(sqrt(x)))) * sqrt(sqrt(sqrt(sqrt(x)))) * ...
换句话说 - 采取的方法如下:
这不是一种快速的方法,我怀疑在中间阶段你需要更多的精度数字,以确保最终结果的足够精确度。但它会起作用......
如果你需要帮助实现这一点让我知道 - 我可能会有时间(或者其他一个看这个答案的人可能会受到启发来编写代码)。
答案 1 :(得分:-1)
您可以使用wolframalpha来计算不可能的数学问题。
<?php
function pow_a($a,$b){
$a = file_get_contents("http://www.wolframalpha.com/input/?i=$a"."%5E"."$b");
if(preg_match_all('/first\sbtn\"\>\<a\shref\=\"(.*?)\"/', $a, $m))
$b = file_get_contents("http://www.wolframalpha.com/input/".htmlspecialchars_decode($m[1][0]));
if(preg_match_all("/\"stringified\"\:\s\"(.*?)\.\.\./i", $b, $k))
return $k[1][0];
}
echo pow_a("9999999999999999999999999", "0.2222");
?>
度过愉快的一天