¿Cuáles son las diferencias entre dc
y bc
calculadoras?
¿Cuándo debo usar dc
y cuándo bc
?
command-line
bc
calculator
sintagma
fuente
fuente
expr
muy a menudo para cálculos simples en la línea de comandos y en los scripts.Respuestas:
dc
Es una herramienta muy arcaica y algo más antigua quebc
. Para citar la página de Wikipedia :La sintaxis es una notación de pulido inverso, lo que básicamente significa que los argumentos (es decir, los números) vienen primero seguidos por el operador. Un ejemplo básico del
dc
uso es:Donde
p
se requiere para imprimir el resultado del cálculo.bc
por otro lado usa la notación infija más familiar y por lo tanto es más intuitiva de usar. Aquí hay un ejemplo debc
uso:¿Cuál usar?
bc
está estandarizado por POSIX y probablemente sea el más portátil de los dos (al menos en los sistemas modernos). Si está haciendo un trabajo de calculadora manual, definitivamente es la opción (a menos que sea un poco masoquista).dc
Sin embargo, todavía puede tener sus usos, aquí hay un caso en el que la notación de pulido inverso es útil. Imagine que tiene un programa que genera una secuencia de números que desea sumar, por ejemplo:Hacer esto
dc
es muy simple (al menos con implementaciones modernas donde cada operador puede tomar más de dos números) ya que solo tiene que agregar un+p
a la secuencia, por ejemplo:Pero con
bc
esto es más complejo, ya que no solo necesitamos poner un+
entre cada número y asegurarnos de que todo esté en la misma línea, sino también asegurarnos de que haya una nueva línea al final:fuente
gen_nums
ejemplo en un uso terriblemente complejobc
. Se podría simplificarse a:gen_nums | paste -sd+ | bc
bc
era solo una herramienta front-end que compilaba labc
notación a la notación dedc
y la canalizabadc
para obtener el resultado. En FreeBSD todavía existe la-c
banderabc
con la que aún puede compilar ladc
notación. For example
echo '3 * 4' | bc` es igual aecho '3 * 4' | bc -c | dc
. Ver el linux.die.net/man/1/bc y freebsd.org/cgi/man.cgi?query=bc&sektion=1dc
está usando? En Ubuntu 14.04 y OS X, el+
operador siempre opera con exactamente dos valores fuera de la piladc
uso:gen_nums_nonnegative | dc -e '0 0 [+?z1<m]dsmxp'
. Este scriptdc
lee y agrega números uno por uno en bucle y luego imprime el resultado. Ver la nota sobre números negativos.bc -c
hace algo extraño y diferente (y la-c
bandera no está documentada). Si trato de canalizarlodc
, obtengo un montón de errores (y la salida sin canalizardc
es muy críptica@iK3:K4:*W@r\n@i
).Una diferencia básica entre los dos es que
dc
usa la notación polaca inversa . Requiere comandos explícitos incluso para producir una salida.Puede agregar dos enteros
bc
diciendo:y produciría
6
en una línea por sí mismo. Sin embargo, endc
tendrías que decir:También puede hacer cosas muy divertidas usando
dc
, por ejemplo, consulte mi respuesta aquí para producirutilizando
dc
.fuente
corriente continua antes de Cristodc
es una calculadora mientras quebc
es un lenguaje real. Ver sus páginas de manual.Realmente depende de lo que finalmente quieras hacer matemáticamente. Algunas operaciones no son posibles usando
dc
. He usado ambos a lo largo de los años además de varias otras herramientas de calculadora de línea de comandos. Consulte " Solucionador de expresiones de línea de comando? " Para ver algunos ejemplos adicionales.fuente
dc
ser una calculadora de notación polaca inversa y desde siempre he utilizado HP inversa calculadoras de notación polaca en realidad prefieren usardc
abc
, pero yo diría que ambos son usados en cualquier momento todavía es necesario realizar un cálculo matemático complejo. A menudo los uso para convertir números en blanco y negro de base 10 a base 16 y base 2. Pero los he usado para contar columnas en datos tabulares también desde un script AWK.bc
era un lenguaje en el sentido de que lo hacíadc
amigable para los humanos, no es que fuera más poderoso. En estos días, las aplicaciones comparten bibliotecas, perobc
se llamaba un idioma ydc
una calculadora porquedc
hacía matemáticas ybc
hablaba de matemáticasdc
. Aquí hay unaman
página anterior : se ha desarrollado un lenguaje llamadoBC
[1] que acepta programas escritos en lenguajes de nivel superior y compila resultados que DC interpreta. Algunos de los comandos descritos a continuación fueron diseñados para la interfaz del compilador y no son fáciles de manipular por un usuario humano.dc
que también es un idioma. por ejemplo codegolf.stackexchange.com/a/47921/11259En mi humilde opinión y en la menor cantidad de palabras posible, GNU dc difiere de GNU bc en 3 formas:
1) Si la biblioteca matemática de bc no le preocupa, guardar tantas pulsaciones de teclas como sea posible (en palabras de Jan Łukasiewicz: una notación sin paréntesis) al hacer aritmética elemental, para concentrarse más en lo esencial y evitar distracciones.
2) En la línea de comandos de Microsoft Windows 7, GNU dc consume menos memoria (~ 320K) que GNU bc (~ 360K).
3) Mucho control granular en GNU dc que en GNU bc, por ejemplo, los comandos de pila y registro están ausentes de GNU bc.
La versión 1.07.1 win32 para ambos está en https://embedeo.org/ws/command_line/bc_dc_calculator_windows/
fuente