If like me, you do most of your work from the command-line, using vim to edit files, mutt for e-mails, cd/ls/mv/find/etc instead of a file manager, then you may get annoyed by having to fire up a GUI calculator to make (what may sometimes be) a single calculation.
One useful feature of calculating on the command-line is that you can see what you've typed. For instance, sometimes when I'm entering a long, complex calculation on a calculator (either the GUI or the solid, hold-in-your-hand type), I sometimes forget if I've actually typed in all those numbers or made the calculations in the right order. Maybe it's just me ...
This article shows how to quickly perform standard calculations on the command line including addition, subtraction, multiplication, division, square root, powers, conversion from decimal to hex, decimal to binary, hex to decimal, and binary to decimal. It also briefly introduces using bc
in interactive mode and how to write files for use with bc
for frequently repeated operations. There is a mention of using Google for performing calulations. It finishes with a little challenge to test the power of your CPU.
Other advantages of using bc
include:
-
bc
is included with (almost?) all Linux distros as standard, as well as (again, almost?) all Unices.
- Results from calculations in some proprietary flavours of
bc
have up to 99 decimal digits before and after the decimal point. This limit has been greatly surpassed in GNU bc
. I don't know what that limit is, but it's at least many, many tens of thousands. Certainly it's more than any GUI-based calculators (I've used) could accomodate.
- You may also find yourself working in an environment where you simply don't have access to a GUI.
- The syntax for basic sums is almost identical to Google's calculator function, so you can learn how to use two utilities in one go!
bc
is a preprocessor for dc
. The useful thing about bc
is that it accepts input from files and from standard input. This allows us to pipe data to it for quick calculations.
Most of these examples follow a simple formula.
addition
$ echo '57+43' | bc
100
subtraction
$ echo '57-43' | bc
14
multiplication
$ echo '57*43' | bc
2451
scale
The scale
variable determines the number of digits which follow the decimal point in your result. By default, the value of the scale
variable is zero. (Unless you use the -l
option in which case it defaults to 20 decimal places. More about -l
later.) This can be set by declaring scale
before your calculation, as in the following division example:
division
$ echo 'scale=25;57/43' | bc
1.3255813953488372093023255
square root
$ echo 'scale=30;sqrt(2)' | bc
1.414213562373095048801688724209
This beats Google's calculator function which only calculates the result to 8 decimal places! Although Google's calculator function has this 8 decimal places limitation, it will allow imaginary numbers as answers.
power
$ echo '6^6' | bc
46656
parentheses
If you have read Robert Heinlein's The Number of the Beast, you may recall that the number of parallel universes in the story equals (six to the power of six) to the power of six. If you should try to calculate that like this:
$ echo '6^6^6' | bc
You will get a screen full of numbers (some 37374 digits), not the
10314424798490535546171949056
that you might expect.
If you're running a non-GNU version of bc
, you'll most likely get something like:
exp too big
empty stack
save:args
The Google Calculator balks at '6^6^6' as well. Good ol' GNU.
That's because you typed the wrong question. You need to type:
$ echo '(6^6)^6' | bc
Whereas what you did type was interpreted as:
$ echo '6^(6^6)' | bc
which is an entirely different number altogether. So the positioning of parentheses (brackets to you and me!) is very important. I use brackets to separate the different components of my sums whenever possible, just eliminate any possible doubt that I may get the wrong answer. Consider the following calculations:
$ echo '7+(6*5)' | bc
$ echo '7+6*5' | bc
$ echo '6*5+7' | bc
They all give the same answer, 37, but I would have typed the first calculation, unless of course, I meant:
$ echo '(7+6)*5' | bc
Or to put it another way:
$ echo '13*5' | bc
which is 65.
obase and ibase
obase
and ibase
are special variables which define output and input base.
Legitimate obase
values range from 2 to 999, although anything beyond 16 is wasted on me!
Legitimate ibase
values range from 2 to 16.
Some examples will explain all this better.
convert from decimal to hexadecimal
Here we're converting 255 from base 10 to base 16:
$ echo 'obase=16;255' | bc
FF
convert from decimal to binary
And here we're converting the number 12 from base 10 to base 2:
$ echo 'obase=2;12' | bc
1100
Which reminds me of the old joke:
There are only 10 types of people in the world -- those who understand binary, and those who don't.
Which leads us neatly onto the next example:
convert from binary to decimal
Here we're converting the binary number 10 to a base 10 (decimal) number.
$ echo 'ibase=2;obase=A;10' | bc
2
Note that the obase
is "A
" and not "10
". Sorry, you've got to learn some hex. The reason for this is you've set the ibase
to "2
", so if you now had tried to use "10
" as the value for the obase
, it would stay as "2
", because "10
" in base 2 is "2
". So you need to use hex to "break out" of binary mode.
Well, that was just to explain the joke; now something a bit more challenging:
$ echo 'ibase=2;obase=A;10000001' | bc
129
convert from hexadecimal to decimal
$ echo 'ibase=16;obase=A;FF' | bc
255
Again, note the use of "A
" to denote base 10. That is because "10
" in hex (base 16 - the ibase
value) is 16.
a brief introduction to interactive mode
You can also run bc
in interactive mode:
$ bc
If you're running GNU bc
, you should get the following notice:
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
Followed by an uninviting blank prompt. Otherwise you'll just get an uninviting blank prompt.
If you wish to get straight to the uninviting blank prompt, use the-q
option, which runs bc
in quiet mode, preventing the normal GNU bc welcome from being printed:
$ bc -q
Using the basics we've been through from the examples above, enter a calculation:
scale=5
57/43
1.32558
Type quit to exit bc
interactive mode.
using bc with shell scripts
You can use shell variables with bc
, which is very useful in shell scripts:
$ FIVE=5 ; echo "$FIVE^2" | bc
25
Note the use of double-quotes to preserve the value of the variable$FIVE
.
a brief introduction to using bc with files
Using bc
with files allows complex calculations to be repeated, again and again, a bit like using a spreadsheet to run the same calculations on changing figures ... but faster.
Here is a simple example:
scale=2
/* C-style comments
are allowed, as are spaces */
print "\nConvert Fahrenheit to Celsius\n\n"
print "Temperature in Fahrenheit: " ; fah = read()
print "\n"
print "Equivalent Temperature in Celsius is: "
(fah - 32.0) * 5.0 / 9.0
quit
Create and save the file, then run it like this:
$ bc -q filename
Convert Fahrenheit to Celsius
Temperature in Fahrenheit: 61
Equivalent Temperature in Celsius is: 16.11
Note that this example has only been tested with GNU bc
. Other (proprietary) versions of bc
may have more stringent syntax requirements. Some bc
s don't allow the use of print
or read
, for example, so you have to edit your file before each calculation. Not very useful.
a quick challenge for your PC (GNU bc only)
If you wish to test the comparative speed of your PC, try this challenge: use bc
to calculate Pi to 5000 decimal places. The idea for this challenge came from a great article at Geekronomicon.
If you really want to tie up your machine for an hour (or more), you could try the "Pi to 25000 decimal places" challenge from the aforementioned Geekronomicon.
First, to put things in perspective, here is some information about my CPU:
$ cat /proc/cpuinfo | egrep "model name|MHz"
model name : AMD Athlon(tm) 64 Processor 3500+
cpu MHz : 2211.346
Note the use (below) of the command bc -l -q.
-l
loads the math library which is required for the use of the "a
" (arctangent) in the calculation for Pi. You can learn more about the math library functions in the bc command manual.
I'm not sure what effect the -q
option (quiet, no welcome message printed) has on our test, but I guess it can't harm.
$ time echo "scale=5000; 4*a(1)" | bc -l -q
3.141592653589793238462643383279502884197169399375105820974944592307\
...
...
...
73774418426312986080998886874132604720
real 0m44.164s
user 0m44.099s
sys 0m0.008s
44.099 seconds! Not bad. I imagine that some Gentoo folks may be interested to see what difference their compile-time optimisations make to the speed of bc
. FWIW, my distro of choice isArch Linux.
useful links
GNU bc manual
Google's calculator function
相关推荐
linux下提取的 可在windows下 使用的 高精度计算 bc、qc单文件命令行版
大家好,我是良许。...1. 如何在 Linux 中使用 bc 执行计算 bc 是一种以交互式语句执行的方式支持任意精度的数字的语言,它的语法和 C 语言有一些相似之处。 bc 的命令行选项中有一个可用的标准数学库,如果有相关
windows 批处理的计算功能比较弱。有些情况下需要借助bc来进行更复杂的计算
每个现代的Linux桌面发行版都预装着一个带有图形界面的计算器程序。不过如果你的工作区中全是命令行窗口,那么你一定会在其中的一个...当然Linux下有很多基于命令行的计算器应用,我认为GNU bc是功能最强大和最有用的。
自己从linux下移植到windows下的bc-1.06,非常好用的。
浮点计算器、进制转换 -- Linux命令之bc
bc 命令是任意精度计算器语言,通常在linux下当计算器用。 它类似基本的计算器, 使用这个计算器可以做基本的数学运算。 常用的运算: + 加法 – 减法 * 乘法 / 除法 ^ 指数 % 余数 语法 bc(选项)(参数) 选项值 -i...
linux bc命令源码:bc-1.06 在linux编译安装: 1.解压 2.configfure 3.make 4.make install
首先,对于在命令行使用命令进行数学运算,可能最容易想到、最常用的命令就是 expr ( 表达式 expression 。它可以完成四则运算,也可以用于比较大小。下面是几个例子: 变量递增 $ count=0 $ count=`expr $count ...
linux下的计算器使用机器;如 用bc进行计算,进制转换等.
要使用清单3老版本的程序,可以按照5~8构建对应测试批处理或者直接在命令行指定参数,例如进行乘法可以使用命令 bc m。需要注意, 测试的时候C1.txt会被覆盖,需要先重命名上一次的文件。 3.关于最大计算位数当前...
如果您在工程项目中使用此晶体管,那么我建议您下载BC547的Proteus Simulation,因为在进入硬件之前先进行仿真始终是更好的策略。因此,让我们看一下BC547的基础知识。这是BC547的引脚排列图: bc547引脚图 bc...
bc-1.06 linux系统下自带的command-line计算器程序源代码
Web作曲家从浏览器访问命令行。安装将此存储webcomposer (或只是下载并移动)到服务器中的某个特定文件夹(例如webcomposer文件夹)。 在浏览器中访问: http://example.com/webcomposer/index.php : ...
通过解读源码,在windows下ok,而在linux下解析格式有所不同才导致上面的各种异常,最终修改了源码包中的Encoder.java,整合ffmpeg-2.7.2-x64版本 参考文献: 1、jave-1.0.2源码下载地址:...
在使用该量产工具之前,请先使用芯片精灵软件检查一下你的U盘是否是主控型号: FC1178BC,若是就可以使用本量产程序。若某一设备运行时出现软件异常,请等待其他设备运行完成后再点击确定。可指定FLASH闪存芯片类型...
bc:使用计算器 使用bc计算器结果默认不保留小数点后任何一位 如需保留小数点 输入命令 scale=4(保留小数点后4位) 使用quit退出(快捷键:Ctrl+C) 灵活使用Table键 history:显示历史记录(最多纪录1000...
3.5 在OpenLinux操作系统中使用艾美加 (Iomega)公司的Zip驱动器 42 3.6 课时小结 43 3.7 专家答疑 43 3.8 练习题 43 第二部分 学习Linux操作系统的基本命令 第4学时 阅读与浏览命令 46 4.1 使用man命令获取帮助 46...
在与银联的对接中,调试过程中报错或使用类似登入加密:java.lang.SecurityException: JCE cannot authenticate the provider BC 进行问题解决,里面包含 bcprov-jdk16-143.jar与bcprov-jdk15-135.jar与具体文件存放...
迈瑞BC-5500中文使用手册(含LIS通讯) LIS开发,通信协议