关于数学函数 exp(x) 的说明
为了将指数函数的精度延续到无限多的十进制位数,可以使用 exp(x) 的幂级数定义。
(用 LaTeX 格式:)
e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!}
所以,要在 PHP 中做到这一点(使用 BC 数学)
<?php
function bcpowfact($x, $n) {
if (bccomp($n, '0') == 0) return '1.0';
if (bccomp($n, '1') == 1) return $x;
$a = $x; $i = $n;
while (bccomp($i, '1') == 1) {
$a = bcmul($a, bcdiv($x, $i));
$i = bcsub($i, '1'); }
return $a;
}
function bcexp($x, $decimal_places) {
$sum = $prev_sum = '0.0';
$error = bcdiv(bcpow('10', '-'.$decimal_places), 10); $n = '0';
do {
$prev_sum = $sum;
$sum = bcadd($sum, bcpowfact($x, $n));
}
while (bccomp(bcsub($sum, $prev_sum), $error) == 1);
return $sum;
}
?>