2.13. Taking LogarithmsProblemYou want to take a logarithm in various bases. Solution
For logarithms to base
e
, use the built-in $log_e = log(VALUE);
For logarithms to base 10, use the POSIX module's use POSIX qw(log10); $log_10 = log10(VALUE); For other bases, use the mathematical identity: where x is the number whose logarithm you want, n is the desired base, and e is the natural logarithm base. sub log_base { my ($base, $value) = @_; return log($value)/log($base); } Discussion
# log_base defined as above
$answer = log_base(10, 10_000);
print "log10(10,000) = $answer\n";
The
Math::Complex module does the caching for you via its
use Math::Complex;
printf "log2(1024) = %lf\n", logn(1024, 2); # watch out for argument order!
even though no complex number is involved here. This is not very efficient, but there are plans to rewrite See Also
The Copyright © 2002 O'Reilly & Associates. All rights reserved. |
|