How do I calculate the log of a number using bc?

UnixBc

Unix Problem Overview


This is the first time I am using bc. I want to calculate the log (base 10) of a number. How do I this?

Unix Solutions


Solution 1 - Unix

Invoke bc with the -l option (to enable the math library) like so

$ echo 'l(100)/l(10)' | bc -l
2.00000000000000000000

Use the l function which is the natural log. Take the log of the number you are interested in then divide by the natural log of 10.

Solution 2 - Unix

the logarithm of x in respect to base b can be computed given any logarithm function to an arbitrary base k -- that's actually pretty cool!

log_b(x) = log_k(x) / log_k(b)

e.g.

log_b(x) = ln(x) / ln(b)

if b=10:

log_10(x) = ln(x) / ln(10)

and -l in bc enables the math library

so that's why this works:

# bc -l
l(100) / l(10)
2.00000000000000000000

Solution 3 - Unix

If you start bc with the -l switch, then there's a function l() that calculates the natural log of its argument.

Solution 4 - Unix

bc does not directly gives the logarithm in other than except or in other ways, using bc, we can calculate only ln(x). So, to get any other base logarithm, it is wise to remember some identities. The basic one is -

log base 10 (x) = log base e (x) / log base e (10)

Here I am giving you some examples of different base logarithms -

totan@Home-Computer ~ $ bc -l
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

l(8)/l(2)
3.00000000000000000002

l(1000)/l(10)
3.00000000000000000000

l(100000)/l(100)
2.50000000000000000000

l(100000)/l(10)
5.00000000000000000001

l(81)/l(3)
4.00000000000000000001

l(64)/l(4)
3.00000000000000000000

quit()
totan@Home-Computer ~ $ 

Hope this helps you.

Solution 5 - Unix

Solution 6 - Unix

Poster specifically requested log 10.

I have bc 1.06.95 on Ubuntu 12.10. "l(x)" in this version of BC is not base 10. It is natural log (base e). This is confirmed here and BC has worked this way since some time:

http://linux.about.com/od/commands/l/blcmdl1_bc.htm

I suspect what you need to make log base 10 work is the BC extension:

http://x-bc.sourceforge.net/extensions_bc.html

Not sure correct way to install this, and got errors trying to post it here.

Dominic-Luc Webb

Solution 7 - Unix

As many others have pointed out, bc invoked with the -l option will include the standard math libraries, and offer their functionality through extensions. @dee pointed to additional extensions that solved the problem I had of calculating log2() that led me to this post. I've found no way to "install" them, but they can be loaded at runtime by including the file when invoking bc:

bc -l extensions.bc

If you want to make this the default behavior, define the environment variable BC_ENV_ARGS to -l /pathToExtension/extensions.bc in your shell's profile or .rc

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBruceView Question on Stackoverflow
Solution 1 - UnixRay ToalView Answer on Stackoverflow
Solution 2 - UnixTiloView Answer on Stackoverflow
Solution 3 - UnixErnest Friedman-HillView Answer on Stackoverflow
Solution 4 - UnixPalash Kanti KunduView Answer on Stackoverflow
Solution 5 - UnixMichael DautermannView Answer on Stackoverflow
Solution 6 - UnixdeeView Answer on Stackoverflow
Solution 7 - UnixhyperkineticView Answer on Stackoverflow