Wygląda na to, że bc nie obsługuje operacji zmiennoprzecinkowych, kiedy to zrobię echo 1/8 | bc
, otrzymam zero.
Sprawdziłem bc (1)
, ale nawet o tym nie wspomina float
, więc zastanawiam się, czy jest obsługiwany?
Wygląda na to, że bc nie obsługuje operacji zmiennoprzecinkowych, kiedy to zrobię echo 1/8 | bc
, otrzymam zero.
Sprawdziłem bc (1)
, ale nawet o tym nie wspomina float
, więc zastanawiam się, czy jest obsługiwany?
Odpowiedzi:
bc
nie robi liczb zmiennoprzecinkowych, ale robi precyzyjne liczby dziesiętne o ustalonej dokładności -l
Flag Hauke wspomina ładuje biblioteki matematyka dla np. funkcje trig, ale to także oznacza
[...] domyślna skala to 20
scale
jest jedną z wielu „zmiennych specjalnych” wymienionych na stronie man. Możesz ustawić:
scale=4
Kiedykolwiek chcesz (czy -l
był używany czy nie). Odnosi się do liczby cyfr znaczących użytych w systemie dziesiętnym . Innymi słowy, kolejne rozwiązania zostaną zaokrąglone do tej liczby cyfr po skali dziesiętnej (== stała dokładność).
Domyślna skala sans -l
to 0, co oznacza zaokrąglenie do liczb całkowitych.
strona man mówi:
Jeśli bc zostanie wywołane z opcją -l, biblioteka matematyczna zostanie wstępnie załadowana [...]
Zrozumiałość tego można poprawić, w rzeczywistości ...
1) Liczby w bc mają skalę. Skali liczby nie należy mylić ze współczynnikiem skali. Ta sama „skala” świata jest używana jako funkcja do sprawdzania skali liczby lub jako parametr do ustawiania współczynnika skali.
echo "scale=scale(1.1);11/10" | bc will return 1.1
2) Współczynnik skali określa, ile cyfr jest trzymanych po prawej stronie przecinka dziesiętnego podczas wykonywania operacji. Jeśli s jest bieżącym współczynnikiem skali, sa to skala pierwszego operandu a, sb to skala drugiego operandu b, wyniki są obcinane w następujący sposób:
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) U źródła bc był preprocesorem dc. Obecnie w wielu systemach bc jest samodzielnym programem.
Źródło: [ https://plan9.io/magic/man2html/1/dc]
echo "scale=4; 1/8" | bc