¿Operación flotante con bc?


42

Parece que bc no admite operaciones flotantes, cuando lo hago echo 1/8 | bcme da un cero.

Lo comprobé bc (1), pero ni siquiera menciona float, así que me pregunto si es compatible.


99
echo "scale=4; 1/8" | bc
LiuYan 刘 研

Esta pregunta y en particular la respuesta aceptada pueden ser interesantes para usted.
Emanuel Berg

Respuestas:


56

bcno hace coma flotante pero sí números decimales de precisión fijos. La -lbandera que menciona Hauke ​​carga una biblioteca matemática, por ejemplo. funciones trigonométricas pero también significa

[...] la escala predeterminada es 20

scalees 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 -lse 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 -les 0, lo que significa redondeado a números enteros.


27

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 ...



0

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]

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.