加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

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

发布时间:2020-05-25 09:23:11 所属栏目:PHP 来源:互联网
导读:我正在使用bcmath在 PHP中进行计算,并且需要通过小数指数来提高e.不幸的是,bcpow()只接受整数指数.指数通常比浮点数允许的精度更高,因此正常的算术函数不会削减它. 例如: $e = exp(1);$pow = 0.00000000000000000010842021724855044340074528008699417114257

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

例如:

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

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

我可以使用另一个函数而不是bcpow()吗?

你最好的选择可能是使用泰勒系列扩展.正如您所指出的,PHP的bcpow仅限于提升整数取幂.

所以你可以做的就是滚动你自己的bc阶乘函数并使用wiki页面来实现指数函数的泰勒级数展开.

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的东西.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读