Bc
| Fiche express | |
|---|---|
| Domaine | Calcul en ligne de commande (arithmétique flottante) |
| Commande | bc
|
| Contexte | Scripts shell nécessitant des calculs à virgule flottante |
| Voir aussi | Let et Test (arithmétique entière) |
bc (basic calculator) est un langage de calcul à précision arbitraire, utilisable en ligne de commande ou en script. Contrairement à let ou à la syntaxe $(( )) du shell, qui ne traitent que des entiers, bc gère les nombres à virgule flottante via la variable scale (nombre de décimales du résultat).
Usage de base
echo "10/3" | bc # 3 (division entière : scale vaut 0 par défaut)
echo "scale=2; 10/3" | bc # 3.33
bc <<< "scale=4; 22/7" # 3.1428
bc -l # mode interactif, charge en plus la bibliothèque mathématique
En mode interactif, quitter avec quit ou Ctrl-D.
Option -l : bibliothèque mathématique
L'option -l charge des fonctions trigonométriques et exponentielles et positionne scale à 20 par défaut.
echo "4*a(1)" | bc -l # pi (a() = arctangente)
echo "sqrt(2)" | bc -l # racine carrée
echo "e(1)" | bc -l # exponentielle
echo "l(10)" | bc -l # logarithme népérien
Fonctions disponibles avec -l : s() sinus, c() cosinus, a() arctangente, l() logarithme népérien, e() exponentielle, sqrt() racine carrée.
scale : précision décimale
scale fixe le nombre de décimales du résultat ; par défaut à 0, ce qui donne une division entière.
echo "scale=100; 4*a(1)" | bc -l # pi avec 100 décimales
echo "scale=2; 10/20*100" | bc -l # 50.00
Bases numériques
ibase et obase changent respectivement la base des nombres en entrée et en sortie.
echo "obase=2; 42" | bc # conversion décimal vers binaire
echo "ibase=16; obase=10; FF" | bc # conversion hexadécimal vers décimal
Utilisation dans un script
bc n'a pas d'équivalent natif à $(( )) pour les flottants : on le pipe depuis une variable shell et on récupère le résultat par substitution de commande.
result=$(echo "scale=2; $a/$b" | bc)
echo "Résultat : $result"