Według instrukcji bc
,
expr % expr
The result of the expression is the "remainder" and it is computed
in the following way. To compute a%b, first a/b is computed to
scale digits. That result is used to compute a-(a/b)*b to the
scale of the maximum of scale+scale(b) and scale(a). If scale is
set to zero and both expressions are integers this expression is
the integer remainder function.
Więc co się dzieje, jest to, że stara się oceniać a-(a/b)*b
przy użyciu bieżących scale
ustawienia. Wartość domyślna scale
wynosi 0, więc otrzymasz pozostałą część. Po uruchomieniu bc -l
otrzymasz scale=20
, a wyrażenie a-(a/b)*b
zostanie obliczone na zero przy użyciu 20 cyfr ułamkowych.
Aby zobaczyć jak to działa, spróbować inne frakcje:
$ bc -l
1%3
.00000000000000000001
Aby długie opowiadanie, wystarczy porównać trzy wyjścia:
domyślnych scale
z -l
włączony (20):
scale
20
3%5
0
1%4
0
Ustawmy scale
na 1:
scale=1
3%5
0
1%4
.2
Albo zero (domyślnie bez -l
):
scale=0
3%5
3
1%4
1