Linux BC Calculator
Perform advanced calculations using the Linux bc command with custom precision and scale
Comprehensive Guide to Linux BC Calculator with Practical Examples
The bc (Basic Calculator) command in Linux is an arbitrary precision calculator language that provides much more power than simple shell arithmetic. This guide covers everything from basic operations to advanced scripting with bc, complete with practical examples you can use in your daily Linux operations.
1. Basic BC Command Syntax
The fundamental syntax for using bc is:
Basic Arithmetic Examples:
echo “5 + 3.2” | bc
# Result: 8.2
# Subtraction
echo “10.5 – 4.1” | bc
# Result: 6.4
# Multiplication
echo “3.5 * 2” | bc
# Result: 7.0
# Division
echo “10 / 3” | bc
# Result: 3
# Exponentiation
echo “2^10” | bc
# Result: 1024
2. Setting Scale for Decimal Precision
By default, bc truncates decimal results. Use the scale variable to control decimal places:
echo “scale=2; 10/3” | bc
# Result: 3.33
# 5 decimal places
echo “scale=5; 22/7” | bc
# Result: 3.14285
3. Working with Different Number Bases
BC supports hexadecimal, octal, and binary calculations:
echo “ibase=16; F5A + 1E” | bc
# Result: F78 (hex) = 3960 (decimal)
# Octal (base 8)
echo “ibase=8; 17 + 12” | bc
# Result: 31 (octal) = 25 (decimal)
# Binary (base 2)
echo “ibase=2; 1010 + 1101” | bc
# Result: 10111 (binary) = 23 (decimal)
4. Advanced Mathematical Functions
BC includes several built-in functions for advanced calculations:
| Function | Description | Example | Result |
|---|---|---|---|
| s(x) | Sine (x in radians) | s(1) | 0.8414709848 |
| c(x) | Cosine (x in radians) | c(1) | 0.5403023058 |
| a(x) | Arctangent | a(1) | 0.7853981633 |
| l(x) | Natural logarithm | l(10) | 2.3025850929 |
| e(x) | Exponential function | e(2) | 7.3890560989 |
5. Using BC in Shell Scripts
BC is particularly powerful when integrated into shell scripts:
# Calculate percentage increase
old_value=150
new_value=185
percentage_increase=$(echo “scale=2; ($new_value – $old_value) / $old_value * 100” | bc)
echo “Percentage increase: $percentage_increase%”
# Calculate compound interest
principal=1000
rate=0.05
years=10
amount=$(echo “scale=2; $principal * (1 + $rate)^$years” | bc)
echo “Future value: $amount”
6. Performance Comparison: BC vs Other Tools
The following table compares bc with other Linux calculation tools:
| Tool | Precision | Floating Point | Scripting | Base Conversion | Speed (1M ops) |
|---|---|---|---|---|---|
| bc | Arbitrary | Yes | Excellent | Yes | 1.2s |
| dc | Arbitrary | Yes | Good | Yes | 0.9s |
| awk | Double | Yes | Excellent | No | 0.4s |
| Python | Arbitrary | Yes | Excellent | Yes | 0.3s |
| Shell (( )) | Integer | No | Limited | No | 0.1s |
7. Practical BC Examples for System Administration
- Disk Space Calculation:
used=$(df -h / | awk ‘NR==2 {print $3}’ | tr -d ‘G’)
total=$(df -h / | awk ‘NR==2 {print $2}’ | tr -d ‘G’)
percentage=$(echo “scale=2; $used / $total * 100” | bc)
echo “Disk usage: $percentage%” - Network Throughput:
bytes=1073741824 # 1GB
time=65.23 # seconds
speed=$(echo “scale=2; $bytes / $time / 1024 / 1024” | bc)
echo “Transfer speed: $speed MB/s” - Memory Usage Analysis:
free_mem=$(free -m | awk ‘NR==2 {print $4}’)
total_mem=$(free -m | awk ‘NR==2 {print $2}’)
mem_percent=$(echo “scale=2; $free_mem / $total_mem * 100” | bc)
echo “Free memory percentage: $mem_percent%”
8. BC for Financial Calculations
BC excels at financial computations where precision is critical:
principal=200000
rate=0.0375 # 3.75% annual
months=360 # 30 years
monthly_rate=$(echo “scale=6; $rate/12” | bc)
payment=$(echo “scale=2; $principal*$monthly_rate*(1+$monthly_rate)^$months/((1+$monthly_rate)^$months-1)” | bc)
echo “Monthly payment: $$payment”
9. BC in Data Processing Pipelines
Combine bc with other Linux commands for powerful data processing:
cat data.txt | awk ‘{sum+=$1} END {print sum/NR}’ | bc -l
# Convert temperatures from Fahrenheit to Celsius
echo “72” | awk ‘{print ($1-32)*5/9}’ | bc
# Calculate standard deviation
echo “10 12 14 16 18” | awk ‘{sum+=$1; sumsq+=$1*$1} END {print sqrt(sumsq/NR-(sum/NR)^2)}’ | bc -l
10. BC Tips and Tricks
- Interactive Mode: Simply type
bcto enter interactive calculator mode - Math Library: Use
bc -lto load the math library for advanced functions - Here Documents: Useful for complex calculations:
bc <
scale=4
pi=4*a(1)
radius=5.25
area=pi*radius^2
print “Area: “, area, “\n”
EOF - Precision Control: Set scale dynamically based on input size
- Error Handling: BC returns non-zero exit codes on errors – useful in scripts
Expert Resources for Linux BC Calculator
For additional authoritative information about the bc calculator and its applications:
- GNU BC Manual – The official documentation from GNU
- Linux Man Pages – bc(1p) – POSIX standard documentation
- IBM AIX Documentation on bc – Enterprise-level bc usage