[comp.unix.internals] Reliability of `bc'

david@glance.ch (David Mosberger) (03/01/91)

A little test program to check a 64 bit division algorithm with `bc'
unexpectedly turned into a test program for `bc' itself (after I found
two bugs in my program :-).

Below I have included a short `bc' program. I ran the program on
both, a UNIX System V.3/386 machine and a Ultrix 4.1 RISC machine. The
results are different, but they have one thing in common: they are wrong!

Does anybody know more about the reliability of `bc,' and what
may cause these strange results with control characters in the output?
Unfortunately, I have no access to the source of `bc' so I can only wonder
about the results...

Any info is appreciated!

	--dave

<--- bug.bc ---><--- bug.bc ---><--- bug.bc ---><--- bug.bc --->
obase=16
ibase=16
x=1A8F5C99605AE52	/* dividend			*/
y=BB0B404		/* divisor			*/
q=245A07AD		/* (correct) quotient		*/
r=147EB9E		/* (correct) remainder		*/
x		/* output numbers just to be sure... */
y
q
r
x/y		/* watch this result! */
x%y		/* watch this result! */
y*q+r		/* check quotient & remainder	*/
/*
 * Do the same thing in base 10:
 */
ibase=A
obase=10
x		/* output numbers just to be sure... */
y
q
r
x/y		/* watch this result! */
x%y		/* watch this result! */
y*q+r		/* check quotient & remainder	*/
<--- bug.bc ---><--- bug.bc ---><--- bug.bc ---><--- bug.bc --->

Output of bc running on a DECstation 5100 with Ultrix 4.1:
==========================================================

Note: First 8 columns on every line were added manually...

x     => 1A8F5C99605AE52
y     => BB0B404
q     => 245A07AD
r     => 147EB9E
x/y   => 2459F81V
x%y   => :l0^B^@
 	/* <= ^B^@ represents ASCII STX and NUL, I replaced them
	   by the printable characters in order to get them through
	   the mailer */
y*q+r => 1A8F5C99605AE52
x     => 119615636279504466
y     => 196129796
q     => 609879981
r     => 21490590
x/y   => 609880-390-106
x%y   => :l0^B^@		/* see note above... */
y*q+r => 119615636279504466


Output of bc running on a 386 box with SCO ODT 1.0 (System 5.3):
================================================================

Note: First 8 columns on every line were added manually...

x     => 1A8F5C99605AE52
y     => BB0B404
q     => 245A07AD
r     => 147EB9E
x/y   => 2459FF57
x%y   => 65F84F6
y*q+r => 1A8F5C99605AE52
x     => 119615636279504466
y     => 196129796
q     => 609879981
r     => 21490590
x/y   => 609880-2247		/* certainly a strange result... */
x%y   => 106923254
y*q+r => 119615636279504466

-- 
David Mosberger						Glance Ltd.
david@glance.ch						Gewerbestrasse 4
UUCP: {...}!{uunet,mcsun}!vichy!david			8162 Steinmaur
X.400: S=david;O=glance;P=switch;A=arCom;C=ch		Switzerland

andrew@alice.att.com (Andrew Hume) (03/05/91)

	as far as i know, bc is essentialy bugless.
dc, on the other hand, especially as distributed by at&t, sorry, USL,
has numerous small glitches. sorry.