Operacja pływaka z bc?

42

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?

stokrotka
źródło
9
echo "scale=4; 1/8" | bc
LiuYan 研 研
To pytanie, a w szczególności zaakceptowana odpowiedź, może być dla Ciebie interesujące.
Emanuel Berg

Odpowiedzi:

56

bcnie robi liczb zmiennoprzecinkowych, ale robi precyzyjne liczby dziesiętne o ustalonej dokładności -lFlag Hauke wspomina ładuje biblioteki matematyka dla np. funkcje trig, ale to także oznacza

[...] domyślna skala to 20

scalejest jedną z wielu „zmiennych specjalnych” wymienionych na stronie man. Możesz ustawić:

scale=4

Kiedykolwiek chcesz (czy -lbył 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 -lto 0, co oznacza zaokrąglenie do liczb całkowitych.

Złotowłosa
źródło
27

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

Hauke ​​Laging
źródło
14
Zgłoś to jako błąd ...
vonbrand,
0

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]

cd9
źródło