關於數學函式 exp(x) 的注意事項
要將指數函式的精度延續到無限多個小數位,可以使用 exp(x) 的冪級數定義。
(以 LaTeX 形式:)
e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!}
因此,要在 PHP 中執行此操作(使用 BC Math)
<?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;
}
?>