Quelles sont les différences entre dc
et les bc
calculatrices?
Quand dois-je utiliser dc
et quand bc
?
command-line
bc
calculator
syntagme
la source
la source
expr
très souvent des calculs simples sur la ligne de commande et dans les scripts.Réponses:
dc
est un outil très archaïque et un peu plus ancien quebc
. Pour citer la page Wikipedia :La syntaxe est une notation polonaise inversée, ce qui signifie essentiellement que les arguments (c'est-à-dire les nombres) viennent en premier, suivis de l'opérateur. Un exemple de base de l'
dc
utilisation est:Où
p
est requis pour imprimer le résultat du calcul.bc
d'autre part utilise la notation infixe plus familière et est donc plus intuitive à utiliser. Voici un exemple d'bc
utilisation:Lequel utiliser?
bc
est normalisé par POSIX et est probablement le plus portable des deux (au moins sur les systèmes modernes). Si vous faites un travail manuel sur une calculatrice, c'est certainement le choix (sauf si vous êtes un peu masochiste).dc
peut encore avoir ses utilisations, voici un cas où la notation de polissage inversé est utile. Imaginez que vous ayez un programme qui génère un flux de nombres que vous souhaitez totaliser, par exemple:Pour ce faire,
dc
c'est très simple (au moins avec les implémentations modernes où chaque opérateur peut prendre plus de deux nombres) puisque vous n'avez qu'à ajouter un+p
au flux, par exemple:Mais
bc
c'est plus complexe car nous devons non seulement mettre un+
entre chaque numéro et nous assurer que tout est sur la même ligne, mais aussi s'assurer qu'il y a une nouvelle ligne à la fin:la source
gen_nums
exemple horriblement complexe en utilisantbc
. Il pourrait être simplifié commegen_nums | paste -sd+ | bc
bc
n'était qu'un outil frontal qui compilait labc
notationdc
et la canalisaitdc
pour obtenir le résultat. Sur FreeBSD, il y a toujours le-c
drapeaubc
avec lequel vous pouvez toujours compiler à ladc
notation. For example
echo '3 * 4' | bc` est égal àecho '3 * 4' | bc -c | dc
. Voir le linux.die.net/man/1/bc et freebsd.org/cgi/man.cgi?query=bc&sektion=1dc
utilisez-vous? Sur Ubuntu 14.04 et OS X, l'+
opérateur opère toujours sur exactement deux valeurs hors de la piledc
utilisation:gen_nums_nonnegative | dc -e '0 0 [+?z1<m]dsmxp'
. Ce script pourdc
lit et ajoute les nombres un par un en boucle, puis imprime le résultat. Voir la note concernant les nombres négatifs.bc -c
fait quelque chose de bizarre et différent (et le-c
drapeau n'est pas documenté). Si j'essaye de le canaliserdc
, j'obtiens un tas d'erreurs (et la sortie sans canalisationdc
est très cryptique@iK3:K4:*W@r\n@i
).Une différence fondamentale entre les deux est celle qui
dc
utilise la notation polonaise inverse . Il nécessite des commandes explicites même pour produire une sortie.Vous pouvez ajouter deux entiers en
bc
disant:et il produirait
6
sur une ligne par lui-même. Cependant,dc
vous devez dire:Vous pouvez également faire beaucoup de choses amusantes en utilisant
dc
, par exemple, référez-vous à ma réponse ici pour produireen utilisant
dc
.la source
dc avant JCdc
est une calculatrice alors quebc
c'est une langue réelle. Voir leurs pages de manuel.Cela dépend vraiment de ce que vous voulez finalement faire mathématiquement. Certaines opérations ne sont pas possibles en utilisant
dc
. J'ai utilisé les deux au fil des ans en plus de plusieurs autres outils de calculatrice en ligne de commande. Voir « Solveur d'expression de ligne de commande? » Pour des exemples supplémentaires.la source
dc
être une calculatrice de notation polonaise inverse et comme je l' ai toujours utilisé les calculatrices de notation inverse polonais HP , je préfère en utilisantdc
pourbc
mais je dirais qu'ils sont tous les deux en tout temps encore utilisé vous devez effectuer un calcul mathématique complexe. Je les utilise souvent pour convertir des nombres n / b base 10 en base 16 et base 2. Mais je les ai utilisés pour additionner des colonnes dans des données tabulaires à partir d'un script AWK.bc
était une langue dans le sens où elle étaitdc
conviviale pour les humains - pas qu'elle était plus puissante. Ces jours-ci, les applications partagent des bibliothèques, maisbc
étaient appelées une langue etdc
une calculatrice parcedc
qu'elles faisaient des mathématiques etbc
parlaient des mathématiquesdc
. Voici uneman
page plus ancienne : Un langage appeléBC
[1] a été développé qui accepte les programmes écrits dans des langages de niveau supérieur et compile la sortie qui est interprétée par DC. Certaines des commandes décrites ci-dessous ont été conçues pour l'interface du compilateur et ne sont pas faciles à manipuler pour un utilisateur humain.dc
c'est aussi une langue. par exemple codegolf.stackexchange.com/a/47921/11259À mon humble avis et en aussi peu de mots que possible, GNU dc diffère de GNU bc de 3 façons:
1) Si la bibliothèque mathématique de bc ne vous préoccupe pas, enregistrez autant de frappes que possible (selon les mots de Jan Łukasiewicz: une notation sans parenthèses) lorsque vous faites de l'arithmétique élémentaire, pour vous concentrer davantage sur l'essentiel et éviter les distractions.
2) Dans la ligne de commande de Microsoft Windows 7, GNU dc consomme moins de mémoire (~ 320K) que GNU bc (~ 360K).
3) Beaucoup de contrôle granulaire dans GNU dc que dans GNU bc, par exemple, les commandes de pile et de registre sont absentes de GNU bc.
La version 1.07.1 win32 pour les deux est sur https://embedeo.org/ws/command_line/bc_dc_calculator_windows/
la source