Operazione float con bc?


42

Sembra che bc non supporti le operazioni float, quando lo faccio echo 1/8 | bcottengo uno zero.

Ho controllato bc (1), ma non ha nemmeno menzionato float, quindi mi chiedo se è supportato?


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

Questa domanda e in particolare la risposta accettata potrebbero essere interessanti per te.
Emanuel Berg

Risposte:


56

bcnon fa virgola mobile ma fa numeri decimali di precisione fissa. La -lbandiera che Hauke ​​menziona carica ad esempio una libreria matematica. Trig funziona ma significa anche

[...] la scala predefinita è 20

scaleè una delle numerose "variabili speciali" menzionate nella pagina man. Puoi impostarlo:

scale=4

Ogni volta che vuoi ( -lusato o no). Si riferisce al numero di cifre significative utilizzate in un decimale . In altre parole, le soluzioni successive verranno arrotondate a quel numero di cifre dopo la scala decimale (== precisione fissa).

La scala predefinita sans -lè 0, il che significa arrotondato a numeri interi.


27

la pagina man dice:

Se bc viene invocato con l'opzione -l, viene precaricata una libreria matematica [...]

La comprensibilità di ciò potrebbe essere migliorata, anzi ...


14
Segnalalo a monte come un bug ...
vonbrand

0

1) I numeri in bc hanno una scala. La scala di un numero non deve essere confusa con il fattore di scala. La stessa "scala" mondiale viene utilizzata come funzione per interrogare la scala di un numero o come parametro per impostare il fattore di scala.

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

2) Il fattore di scala determina quante cifre vengono mantenute a destra del punto decimale quando si eseguono operazioni. Se s è il fattore di scala corrente, sa è la scala del primo operando a, sb è la scala del secondo operando b, i risultati vengono troncati come segue:

    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) All'origine bc c'era un preprocessore di dc. Ora, su molti sistemi, bc è un programma autonomo.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.