Respuestas:
dc
Es una herramienta muy arcaica y algo más antigua que bc
. Para citar la página de Wikipedia :
Es una de las utilidades más antiguas de Unix, anterior incluso a la invención del lenguaje de programación C; Al igual que otras utilidades de esa época, tiene un poderoso conjunto de características pero una sintaxis extremadamente concisa.
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:
echo '3 4 * p' | dc
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 de bc
uso:
echo '3 * 4' | bc
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:
23
7
90
74
29
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:
{ gen_nums; echo +p } | dc
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:
{ gen_nums | sed '$ !s/$/+/' | tr -d '\n'; echo; } | bc
gen_nums
ejemplo en un uso terriblemente complejo bc
. Se podría simplificarse a:gen_nums | paste -sd+ | bc
bc
era solo una herramienta front-end que compilaba la bc
notación a la notación de dc
y la canalizaba dc
para obtener el resultado. En FreeBSD todavía existe la -c
bandera bc
con la que aún puede compilar la dc
notación . For example
echo '3 * 4' | bc` es igual a echo '3 * 4' | bc -c | dc
. Ver el linux.die.net/man/1/bc y freebsd.org/cgi/man.cgi?query=bc&sektion=1
dc
está usando? En Ubuntu 14.04 y OS X, el +
operador siempre opera con exactamente dos valores fuera de la pila
bc -c
hace algo extraño y diferente (y la -c
bandera no está documentada). Si trato de canalizarlo dc
, obtengo un montón de errores (y la salida sin canalizar dc
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:
bc <<< "2+4"
y produciría 6
en una línea por sí mismo. Sin embargo, en dc
tendrías que decir:
dc <<< "2 4 +p"
También puede hacer cosas muy divertidas usando dc
, por ejemplo, consulte mi respuesta aquí para producir
Hello World!
utilizando dc
.
dc <<< "8 9 * P101P108P108P111P4 8 * P81 6 + P111P114P108P100P33P"
dc
es una calculadora mientras que bc
es un lenguaje real. Ver sus páginas de manual.
antes de Cristodc es una calculadora de escritorio de pulido inverso que admite aritmética de precisión ilimitada. También le permite definir y llamar macros. Normalmente dc lee de la entrada estándar; si se le dan argumentos de comando, son nombres de archivo, y dc lee y ejecuta el contenido de los archivos antes de leerlo desde la entrada estándar. Toda salida normal es a salida estándar; toda salida de error es a error estándar.
bc es un lenguaje que admite números de precisión arbitrarios con ejecución interactiva de declaraciones. Hay algunas similitudes en la sintaxis con el lenguaje de programación C. Una biblioteca matemática estándar está disponible mediante la opción de línea de comando. Si se solicita, la biblioteca matemática se define antes de procesar cualquier archivo. bc comienza procesando el código de todos los archivos enumerados en la línea de comando en el orden indicado. Después de que se hayan procesado todos los archivos, bc lee desde la entrada estándar. Todo el código se ejecuta a medida que se lee. (Si un archivo contiene un comando para detener el procesador, bc nunca leerá desde la entrada estándar).
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.
dc
ser una calculadora de notación polaca inversa y desde siempre he utilizado HP inversa calculadoras de notación polaca en realidad prefieren usar dc
a bc
, 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ía dc
amigable para los humanos, no es que fuera más poderoso. En estos días, las aplicaciones comparten bibliotecas, pero bc
se llamaba un idioma y dc
una calculadora porque dc
hacía matemáticas y bc
hablaba de matemáticas dc
. Aquí hay una man
página anterior : se ha desarrollado un lenguaje llamado BC
[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/11259
En 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/
expr
muy a menudo para cálculos simples en la línea de comandos y en los scripts.