Es sieht so aus, als ob bc keine Float-Operationen unterstützt. Wenn ich das tue echo 1/8 | bc, bekomme ich eine Null.
Ich habe es überprüft bc (1), aber es wird nicht einmal erwähnt float, also frage ich mich, ob es unterstützt wird.
Es sieht so aus, als ob bc keine Float-Operationen unterstützt. Wenn ich das tue echo 1/8 | bc, bekomme ich eine Null.
Ich habe es überprüft bc (1), aber es wird nicht einmal erwähnt float, also frage ich mich, ob es unterstützt wird.
Antworten:
bcFließkommazahlen werden nicht verwendet, es werden jedoch Dezimalzahlen mit fester Genauigkeit verwendet. Die -lFlagge, die Hauke erwähnt, lädt eine Mathematikbibliothek für z. trig funktioniert aber es heißt auch
[...] die Standard - Skala ist 20
scaleist eine von mehreren "Spezialvariablen", die in der Manpage erwähnt werden. Sie können es einstellen:
scale=4
Wann immer Sie wollen (ob -lverwendet oder nicht). Es bezieht sich auf die Anzahl der signifikanten Stellen, die in einer Dezimalstelle verwendet werden . Mit anderen Worten, nachfolgende Lösungen werden auf diese Anzahl von Stellen nach der Dezimalskala gerundet (== feste Genauigkeit).
Die Standardskala ohne -list 0, dh auf ganze Zahlen gerundet.
Manpage sagt:
Wenn bc mit der Option -l aufgerufen wird, ist eine Mathematikbibliothek vorinstalliert [...]
Die Verständlichkeit davon könnte in der Tat verbessert werden ...
1) Zahlen in bc haben eine Skala. Die Skala einer Zahl sollte nicht mit dem Skalierungsfaktor verwechselt werden. Dieselbe Welt-Skalierung wird als Funktion zum Abfragen der Skalierung einer Zahl oder als Parameter zum Festlegen des Skalierungsfaktors verwendet.
echo "scale=scale(1.1);11/10" | bc will return 1.1
2) Der Skalierungsfaktor bestimmt, wie viele Stellen bei Operationen rechts vom Dezimalpunkt stehen. Wenn s der aktuelle Skalierungsfaktor ist, sa die Skalierung des ersten Operanden a ist, sb die Skalierung des zweiten Operanden b ist, werden die Ergebnisse wie folgt gekürzt:
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) Ursprünglich war bc ein Präprozessor von dc. Heute ist bc auf vielen Systemen ein eigenständiges Programm.
Quelle: [ https://plan9.io/magic/man2html/1/dc]
echo "scale=4; 1/8" | bc