I want to calculate the log (base 10) of a number. How can I do this using bc
?

- 722
- 1
- 7
- 22

- 33,927
- 76
- 174
- 262
-
4They should've just called it 'log' or 'ln'. Who expects 'l'? – polynomial_donut Oct 25 '19 at 16:06
-
1@polynomial_donut all the basic functions included in the math library (`bc -l`) have single-character names. The cosine function is `c`. It's a feature ;) – Mike Pierce May 17 '22 at 23:04
8 Answers
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 natural log of the number you are interested in then divide it by the natural log of 10.

- 722
- 1
- 7
- 22

- 86,166
- 18
- 182
- 232
-
4log_b(x) = log_k(x) / log_k(b) :-) the logarithm in respect to base b can be computed given any logarithm function to a arbitrary base k – Tilo Nov 01 '11 at 03:59
-
2
-
2no, the single-quoted variant is correct (`echo '...'`); with "here strings" (`<<<`) do you need to worry about quoting ("here strings...undergo brace expansion, tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, and quote removal.") https://www.gnu.org/software/bash/manual/html_node/Redirections.html#Here-Strings – michael Sep 19 '16 at 03:52
-
In order to `scale` use `scale=2;echo 'l(100)/l(10)' | bc -l` or even better combine it with @yegle's [comment](https://stackoverflow.com/questions/7962283/how-do-i-calculate-the-log-of-a-number-using-bc#comment53331254_7962297) – Timo Aug 03 '22 at 10:08
-
compared to Tilo's [answer](https://stackoverflow.com/a/7962339/1705829) this answer does not explain the math logic of the division behind it, although from math point correct. – Timo Aug 03 '22 at 10:21
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

- 33,354
- 5
- 79
- 106
-
Yeah I wasn't very clear on that... I just didn't know the name of the function in `bc`. I know how to calculate it for different bases :) – polynomial_donut May 22 '22 at 23:05
If you start bc
with the -l
switch, then there's a function l()
that calculates the natural log of its argument.

- 80,601
- 10
- 150
- 186
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.

- 366
- 2
- 9
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

- 19
- 1
-
2The previous answers were pretty clear about it being natural log, which is the normal default on calculators, etc. If you look at that extensions file the `log()` function just does exactly what was suggested here, `return(l(x)/l(10))`. – CodeClown42 Nov 26 '15 at 13:04
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

- 21
- 2
bc -l
l(____)
(fill in the blank there with your number)
I found tutorials at:
http://unix-simple.blogspot.com/2006/10/unix-basic-calculator.html
and
http://unix-simple.blogspot.com/2006/10/taking-roots-with-unix-basic.html

- 88,797
- 17
- 166
- 215
-
-
yep. I mistyped "log" for "l" in my excited hurry to get an answer in before the stampede. – Michael Dautermann Nov 01 '11 at 04:11
-
1
Since bc -l
only gives you the natural logarithm you can define the log function quickly yourself:
define log(x) { return l(x)/l(10) }
log(10)
1.0000000

- 666
- 1
- 6
- 20