gpt4 book ai didi

PHP:如何将数字提高到(微小的)小数指数?

转载 作者:可可西里 更新时间:2023-11-01 13:17:26 26 4
gpt4 key购买 nike

我正在使用 bcmath 在 PHP 中进行计算,并且需要将 e 提高一个小数指数。不幸的是,bcpow() 只接受整数指数。指数通常比 float 允许的精度更高,因此普通算术函数不会削减它。

例如:

$e = exp(1);
$pow = "0.000000000000000000108420217248550443400745280086994171142578125";
$result = bcpow($e, $pow);

结果为 “1”,错误为“bc 数学警告:指数中的非零标度”。

我可以使用其他函数代替 bcpow() 吗?

最佳答案

您最好的选择可能是使用泰勒级数展开。如您所述,PHP 的 bcpow 仅限于对整数求幂。

因此您可以做的是滚动您自己的 bc 阶乘函数并使用维基页面来实现指数函数的泰勒级数展开。

function bcfac($num) { 
if ($num==0) return 1;
$result = '1';
for ( ; $num > 0; $num--)
$result = bcmul($result,$num);
return $result;
}
$mysum = '0';
for ($i=0; $i<300; $i++) {
$mysum = bcadd($mysum, bcdiv(bcpow($pow,$i), bcfac($i)) );
}
print $mysum;

显然,$i<300是无穷大的近似值...您可以更改它以满足您的性能需求。

$i=20 , 我得到了

1.00000000000000000010842021724855044340662275184110560868263421994092888869270293594926619547803962155136242752708629105688492780863293090291376157887898519458498571566021915144483905034693109606778068801680332504212458366799913406541920812216634834265692913062346724688397654924947370526356787052264726969653983148004800229537555582281617497990286595977830803702329470381960270717424849203303593850108090101578510305396615293917807977774686848422213799049363135722460179809890014584148659937665374616

这令人感到欣慰,因为指数的那个小部分应该会产生非常接近 1.0 的结果。

关于PHP:如何将数字提高到(微小的)小数指数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33486170/

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