mirror of https://gitee.com/openkylin/bc.git
41 lines
1.8 KiB
Plaintext
41 lines
1.8 KiB
Plaintext
Because of frequent questions ....... here is the BC FAQ
|
|
|
|
|
|
1) Why does BC have its own arbitrary precision number routines
|
|
(found in lib/number.c) rather than using GMP?
|
|
|
|
GMP has "integers" (no digits after a decimal), "rational numbers"
|
|
(stored as 2 integers) and "floats". None of these will correctly
|
|
represent a POSIX BC number. Floats are the closest, but will not
|
|
behave correctly for many computations. For example, BC numbers have
|
|
a "scale" that represent the number of digits to represent after the
|
|
decimal point. The multiplying two of these numbers requires one to
|
|
calculate an exact number of digits after the decimal point regardless
|
|
of the number of digits in the integer part. GMP floats have a
|
|
"fixed, but arbitrary" mantissa and so multiplying two floats will end
|
|
up dropping digits BC must calculate.
|
|
|
|
2) The code "ibase=16; obase=10; FF" outputs FF, not 255. Isn't this
|
|
a bug?
|
|
|
|
No. ibase changed the input base at that point. The 10 is then in
|
|
base 16 and thus is the value 16. Therefore, both ibase and obase
|
|
are 16 (decimal). And FF (base 16) on input is printed as FF (base 16)
|
|
on output. So how can one get 255? First, single digit numbers are
|
|
not converted using ibase. So A is always 10 (decimal). The following
|
|
code will always work. "ibase=F+1; obase=A; FF" and that always prints
|
|
255.
|
|
|
|
3) Why is the scale variable ignored on multiply?
|
|
|
|
That is the way POSIX specifics multiply. Reread the documentation for
|
|
the multiply operation and see that multiply uses the scales of the
|
|
numbers multiplied to determine the scale of the result.
|
|
|
|
4) bc's mod command is not working when I run with "bc -l".
|
|
|
|
bc's mod (%) command works like integer remainder when scale is 0.
|
|
The -l flag sets scale to 20 and that chanes how a % b is computed.
|
|
Read the man page for exact details.
|
|
|