Bc

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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"

Voir aussi

  • Let — arithmétique entière avec la syntaxe (( ))
  • Test — comparaisons et tests conditionnels en shell