Opération flottante avec bc?


42

Il semble que BC ne supporte pas les opérations de type float. Lorsque je le fais, echo 1/8 | bccela me donne un zéro.

J'ai vérifié bc (1), mais ça ne mentionne même pas float, alors je me demande si c'est supporté?


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

Cette question et en particulier la réponse acceptée pourraient vous intéresser.
Emanuel Berg

Réponses:


56

bcne fait pas de virgule flottante mais fait des nombres décimaux à précision fixe. Le -ldrapeau mentionné par Hauke ​​charge une bibliothèque mathématique pour, par exemple. trig fonctions mais cela signifie aussi

[...] l' échelle par défaut est 20

scaleest l'une des "variables spéciales" mentionnées dans la page de manuel. Vous pouvez le définir:

scale=4

Chaque fois que vous voulez ( -lutilisé ou non). Il fait référence au nombre de chiffres significatifs utilisés dans une décimale . En d'autres termes, les solutions suivantes seront arrondies à ce nombre de chiffres après l'échelle décimale (précision ==).

L'échelle par défaut sans -lest 0, ce qui signifie que les nombres sont arrondis.


27

La page de manuel dit:

Si bc est appelé avec l'option -l, une bibliothèque mathématique est préchargée [...]

La compréhensibilité de cela pourrait être améliorée, en effet ...


14
Signalez-le en amont comme un bug ...
vonbrand

0

1) Les nombres en Colombie-Britannique ont une échelle. L'échelle d'un nombre ne doit pas être confondue avec le facteur d'échelle. La même "échelle" du monde est utilisée en tant que fonction pour interroger l'échelle d'un nombre ou en tant que paramètre pour définir le facteur d'échelle.

echo "scale=scale(1.1);11/10" | bc will return 1.1

2) Le facteur d'échelle détermine combien de chiffres sont conservés à droite du séparateur décimal lors de l'exécution d'opérations. Si s est le facteur d'échelle actuel, sa est l'échelle du premier opérande a, sb est l'échelle du deuxième opérande b, les résultats sont tronqués comme suit:

    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) À l'origine bc était un préprocesseur de dc. À l’heure actuelle, sur de nombreux systèmes, bc est un programme autonome.

Source: [ https://plan9.io/magic/man2html/1/dc]

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.