Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Mathematical Functions : log

log

Natural logarithm (PHP 4, PHP 5)
float log ( float arg [, float base] )


Related Examples ( Source code ) » log
















Code Examples / Notes » log

c0x

more general version, works fine on negative, very big ($value > 1E+18) and very small ($value < 1E-18) numbers.
function expn($value, $prec = 3, $base = 1000, $prefix = '') {
   $e = array('a', 'f', 'p', 'n', 'u', 'm', '', 'k', 'M', 'G', 'T', 'P', 'E');
   $p = min(max(floor(log(abs($value), $base)), -6), 6);
   return round((float)$value / pow($base, $p), $prec) . $prefx . $e[$p + 6];
}


admin

In regards to the note about log in base 10 and the round() function. You need to use floor() instead of round() to find out the order of magnitude. That way, you don't have to worry about subtracting 0.5 or whatever.

mightye

A minor warning:
in PHP < 4.3.0, in order to get the log base 10 of a number, you have to do:
$log10 = log($n)/log(10);
If you want a whole number (to identify the order of magnitude), and you typecast $log10 to (int), you may not get what you expect:
(int)(log(1000)/log(10)) = 2
(log(1000)/log(10)) = 3 (float with no displayed decimal places)
The mathematical error in this causes the typecast to round the result down, even though the error runs out to so many decimal places that it is not displayed, and the float value looks like a whole number.  Instead you may need to do:
round(log($n)/log(10)-0.5,0);
This will give you the order of magnitude of your number.
Presumably in PHP 4.3.0+, a similar result may occur.


ulf wostner

<?php
#--------------------------------------------------------
#     How many digits does an integer have?
#--------------------------------------------------------
function digit_count($n, $base=10) {
 if($n == 0) return 1;
 if($base == 10) {
   # using the built-in log10(x)
   # might be more accurate than log(x)/log(10).
   return 1 + floor(log10(abs($n)));
 }else{
   # here  logB(x) = log(x)/log(B) will have to do.
  return 1 + floor(log(abs($n))/ log($base));
 }
}
# Example:  How many decimal digits for 2 to the power 24?
echo digit_count(pow(2, 24));
# Example: How many bits to write 1 billion in binary, last century?
if($country_code  == 'US') echo digit_count(pow(10, 9), 2);
if($country_code == 'UK') echo digit_count(pow(10, 12), 2);
#--------------------------------------------------------
#     Using log to format columns.
#--------------------------------------------------------
# Suppose we have a dynamically generated list of integers,
# and want to present them as a table. The use of log10 in
# our digit_count helps calculate the proper format string.
function print_list_of_ints($ints, $line_width=40) {
 # Apply our digit_count to the max int among ints.
 $field_width = 2 + digit_count(max($ints));
 # Create format string for printf.
 $format = "%${field_width}d";
 $ints_per_line = floor($line_width/$field_width);
 $border = str_repeat("-", $ints_per_line * $field_width);
 echo "\n$border\n";
 foreach($ints as $count => $int) {
   if( $count and ($count % $ints_per_line == 0)) echo "\n";
   printf($format, $int);
 }
 echo "\n$border\n";
}
# To generate an example, here is a basic function
# returning a list of (pseudo) random numbers.
function rands($how_many) {
 for($i=0; $i < $how_many; $i++) $rands[] = rand();
 return $rands;
}
# Example:  A list of random ints dynamically formatted into columns.
print_list_of_ints(rands(11));
/* Sample output. Numbers and fonts vary. Visualize monospace!
------------------------------------
 1093146637   244503173  1346204527
  638304372   140216732  1054707210
  573915416  1728677954  2038899669
  534854768    12674586
------------------------------------
*/
?>


mcmeijer

$val = 1000000
$val2 = floor(log($val,10)) gives a value of 5 for $val2 and not 6 as expected.
$val2 = floor(log10($val)) gives the correct value.


Change Language


Follow Navioo On Twitter
abs
acos
acosh
asin
asinh
atan2
atan
atanh
base_convert
bindec
ceil
cos
cosh
decbin
dechex
decoct
deg2rad
exp
expm1
floor
fmod
getrandmax
hexdec
hypot
is_finite
is_infinite
is_nan
lcg_value
log10
log1p
log
max
min
mt_getrandmax
mt_rand
mt_srand
octdec
pi
pow
rad2deg
rand
round
sin
sinh
sqrt
srand
tan
tanh
eXTReMe Tracker