SymfonyWorld Online 2022 Winter Edition

# exp

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

expCalculates the exponent of e

exp(float $num): float Returns e raised to the power of num. Bilginize: 'e' is the base of the natural system of logarithms, or approximately 2.718282. ### Değiştirgeler num The argument to process ### Dönen Değerler 'e' raised to the power of num ### Örnekler Örnek 1 exp() example  <?phpecho exp(12) . "\n";echo exp(5.7);?>  Yukarıdaki örneğin çıktısı: 1.6275E+005 298.87  ### Ayrıca Bakınız • log() - Natural logarithm • pow() - Exponential expression add a note ### User Contributed Notes 5 notes boards at gmail dot com 16 years ago  Note regarding the mathematical function exp(x):To continue accuracy of the exponential function to an infinite amount of decimal places, one would use the power series definition for exp(x).(in LaTeX form:)e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!}So, to do that in PHP (using BC math):<?php// arbitrary precision function (x^n)/(n)!function bcpowfact($x, $n) { if (bccomp($n, '0') == 0) return '1.0';  if (bccomp($n, '1') == 1) return$x;  $a =$x; // nth step: a *= x / 1  $i =$n;  while (bccomp($i, '1') == 1) { // ith step: a *= x / i$a = bcmul($a, bcdiv($x, $i));$i = bcsub($i, '1'); // bc idiom for$i--  }  return $a;}// arbitrary precision exp() functionfunction 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;}?> 
zooly at globmi dot com
11 years ago
 PHP does not have the following math function in any extensions:frexp() - Extract Mantissa and Exponent of the Floating-Point ValueI've digged many C source codes, and found the simplest implementation as follows:<?phpfunction 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));?>Array(     => 0.552     => -4)Array(     => 0.67309375     => 5)I have compared the results using a lot of floats against C's frexp function - they are the same.Note that C and PHP uses different float precisions, for example "4619.3" gives:C: 0.56387939453125, 13PHP: 0.563879394531, 13/Assuming default configurations./ 
-4
 working version (checked) of below code is <?php  // see bccomp for this code (signed and unsigned zero!)  function bccomp_zero($amount) { return bccomp($amount, (@$amount{0}=="-"?'-':'').'0.0'); } // arbitrary precision function (x^n)/(n)! function bcpowfact($x, $n) { if (bccomp_zero($n) == 0) return '1';    if (bccomp($n, '1') == 0) return$x;    $a =$x; // 1st step: a *= x / 1    $i =$n;    while (bccomp($i, '1') == 1) { // ith step: a *= x / i$a = bcmul($a, bcdiv($x, $i));$i = bcsub($i, '1'); // bc idiom for$i--    }    return $a; } // arbitrary precision exp() function 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 idiom for $n++ } while (bccomp(bcsub($sum, $prev_sum),$error) == 1);    return $sum; }?>  -5 Nitrogen 12 years ago  Just a note about using the submitted codes below..Their functions have an optional$precision parameter; however, it's not being used properly..BCMath functions by default do not use decimal precision unless specified by BCScale($precision); or using the extra parameter in the used BC functions.For example, a blank PHP file with their code.. executing BCExp('5.7'); returns "47" instead of the correct answer of "298.86740096706..."So for optimum accuracy, I'd suggest setting BCScale to a healthy length before running their codes.  -17 Mohammed AbdelRahman 7 years ago  Which is the inverse of log(float$arg, e) 