Parece que bc no admite operaciones flotantes, cuando lo hago echo 1/8 | bc
me da un cero.
Lo comprobé bc (1)
, pero ni siquiera menciona float
, así que me pregunto si es compatible.
Parece que bc no admite operaciones flotantes, cuando lo hago echo 1/8 | bc
me da un cero.
Lo comprobé bc (1)
, pero ni siquiera menciona float
, así que me pregunto si es compatible.
Respuestas:
bc
no hace coma flotante pero sí números decimales de precisión fijos. La -l
bandera que menciona Hauke carga una biblioteca matemática, por ejemplo. funciones trigonométricas pero también significa
[...] la escala predeterminada es 20
scale
es una de una serie de "variables especiales" mencionadas en la página del manual. Puedes configurarlo:
scale=4
En cualquier momento que desee (ya sea que -l
se haya utilizado o no). Se refiere al número de dígitos significativos utilizados en un decimal . En otras palabras, las soluciones posteriores se redondearán a ese número de dígitos después de la escala decimal (== precisión fija).
La escala predeterminada sin sans -l
es 0, lo que significa redondeado a números enteros.
La página man dice:
Si se invoca bc con la opción -l, se precarga una biblioteca matemática [...]
La comprensión de eso podría mejorarse, de hecho ...
1) Los números en bc tienen una escala. La escala de un número no debe confundirse con el factor de escala. La misma 'escala' mundial se usa como una función para consultar la escala de un número o como un parámetro para establecer el factor de escala.
echo "scale=scale(1.1);11/10" | bc will return 1.1
2) El factor de escala determina cuántos dígitos se mantienen a la derecha del punto decimal cuando se realizan operaciones. Si s es el factor de escala actual, sa es la escala del primer operando a, sb es la escala del segundo operando b, los resultados se truncan de la siguiente manera:
scale of result
a+b max(sa,sb)
a-b max(sa,sb)
a*b min(sa+sb , max(s,sa,sb))
a/b s
a%b so that a = b*quotient + remainder; remainder has sign of a
a^b min(sa×|b|, max(s,sa)); b must be integer
sqrt(a) max(s,sa)
3) En el origen, bc era un preprocesador de dc. Ahora, en muchos sistemas, bc es un programa independiente.
Fuente: [ https://plan9.io/magic/man2html/1/dc]
echo "scale=4; 1/8" | bc