exp

(PHP 4, PHP 5, PHP 7, PHP 8)

exp计算 e 的指数

描述

exp(float $num): float

返回 enum 次方。

注意:

'e' 是自然对数的底数,约等于 2.718282。

参数

num

要处理的参数

返回值

'e' 的 num 次方

示例

示例 #1 exp() 示例

<?php
echo exp(12) . "\n";
echo
exp(5.7);
?>

上面的例子将输出

1.6275E+005
298.87

参见

添加笔记

用户贡献笔记 5 笔记

3
zooly at globmi dot com
13 年前
PHP 在任何扩展中都没有以下数学函数

frexp() - 提取浮点数的尾数和指数

我挖掘了许多 C 源代码,并找到了最简单的实现,如下所示

<?php

function frexp ( $float ) {

$exponent = ( floor(log($float, 2)) + 1 );
$mantissa = ( $float * pow(2, -$exponent) );

return(
array(
$mantissa, $exponent)
);

}

print_r(frexp(0.0345));
print_r(frexp(21.539));

?>

数组
(
[0] => 0.552
[1] => -4
)
数组
(
[0] => 0.67309375
[1] => 5
)

我已经使用许多浮点数将结果与 C 的 frexp 函数进行了比较 - 结果相同。

请注意,C 和 PHP 使用不同的浮点数精度,例如“4619.3”给出

C: 0.56387939453125, 13
PHP: 0.563879394531, 13

/假设默认配置。/
0
boards at gmail dot com
18 年前
关于数学函数 exp(x) 的说明

为了将指数函数的精度延续到无限多的十进制位数,可以使用 exp(x) 的幂级数定义。
(用 LaTeX 格式:)
e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!}

所以,要在 PHP 中做到这一点(使用 BC 数学)

<?php
// 任意精度函数 (x^n)/(n)!
function bcpowfact($x, $n) {
if (
bccomp($n, '0') == 0) return '1.0';
if (
bccomp($n, '1') == 1) return $x;
$a = $x; // 第 n 步: a *= x / 1
$i = $n;
while (
bccomp($i, '1') == 1) {
// 第 i 步: a *= x / i
$a = bcmul($a, bcdiv($x, $i));
$i = bcsub($i, '1'); // bc 中的 $i-- 的表达方式
}
return
$a;
}

// 任意精度 exp() 函数
function bcexp($x, $decimal_places) {
$sum = $prev_sum = '0.0';
$error = bcdiv(bcpow('10', '-'.$decimal_places), 10); // 0.1*10^-k
$n = '0';
do {
$prev_sum = $sum;
$sum = bcadd($sum, bcpowfact($x, $n));
}
while (
bccomp(bcsub($sum, $prev_sum), $error) == 1);
return
$sum;
}
?>
-3
konrad
17 年前
下面代码的工作版本(已检查)

<?php
// 请参阅 bccomp 的代码(带符号和无符号零!)
function bccomp_zero($amount) {
return
bccomp($amount, (@$amount{0}=="-"?'-':'').'0.0');
}

// 任意精度函数 (x^n)/(n)!
function bcpowfact($x, $n) {
if (
bccomp_zero($n) == 0) return '1';
if (
bccomp($n, '1') == 0) return $x;
$a = $x; // 第一步:a *= x / 1
$i = $n;
while (
bccomp($i, '1') == 1) {
// 第 i 步:a *= x / i
$a = bcmul($a, bcdiv($x, $i));
$i = bcsub($i, '1'); // bc 中 $i-- 的语法
}
return
$a;
}

// 任意精度 exp() 函数
function bcexp($x, $digits) {
$sum = $prev_sum = '0.0';
$error = '0.'.str_repeat('0', $digits-1).'1'; // 0.1*10^-k
$n = '0.0';
do {
$prev_sum = $sum;
$sum = bcadd($sum, bcpowfact($x, $n));
$n = bcadd($n, '1'); // bc 中 $n++ 的语法
} while (bccomp(bcsub($sum, $prev_sum), $error) == 1);
return
$sum;
}
?>
-5
Nitrogen
14 年前
关于使用下面提交的代码的说明:
他们的函数有一个可选的 $precision 参数,但没有被正确使用。

BCMath 函数默认情况下不会使用小数精度,除非由 BCScale($precision) 指定,或者在使用的 BC 函数中使用额外的参数。

例如,在一个空白的 PHP 文件中使用他们的代码,执行 BCExp('5.7') 会返回 "47" 而不是正确的答案 "298.86740096706..."。

因此,为了获得最佳精度,建议在运行他们的代码之前设置 BCScale 为一个合理的长度。
-19
Mohammed AbdelRahman
9 年前
哪个是 log(float $arg, e) 的反函数?
To Top