[net.bugs] Prehistoric BC Bug

herndon@umn-cs.UUCP (Robert Herndon) (02/01/84)

#N:umn-cs:1300001:000:745
umn-cs!herndon    Jan 31 17:59:00 1984



  There is a bug in the BC library.  The arc-tangent function ("a")
returns pi/4 for the arctangent of any non-zero number.  The cause
of this is a mis-associated "if" statement in the function definition.
The fix for this is to change the definition of the a() function.

The file currently reads:

125a126,128
> 	if(x==1)
> 		if(scale<52)
> return(.7853981633974483096156608458198757210492923498437764/1)

The following may be substituted:

126,130d125
> 	if(x==1) {
> 		if(scale<52) {
> return(.7853981633974483096156608458198757210492923498437764/1)
> 		}
> 	}

Or the lines may be deleted entirely.  This will slow down the
evaluation of a(1) substantially but will not otherwise harm the
function.

				Robert Herndon
				umn-cs!herndon

dcw@ukc.UUCP (D.C.Wood) (02/03/84)

Here is a Bigger and Better Bug in Bc:

scale=99
x=sqrt(2)
x
1.414213562373095048801688724209698078569671875376948073176679737990732\
478462107038850387534327641572
x*x
199999999999999999999999999999999999999999999999999999999999999999999\
9999999999999999999999999999997921066900256462438170679779231122858093\
9665738428702231869954990504493272650132450052758957026311840./
x^2
1.999999999999999999999999999999999999999999999999999999999999999999999\
999999999999999999999999999997

Multiplication can give a relative error of 199(!) orders of magnitude
when the scale is greater than 63.  Is this a record?  Exponetiation gets
it right.

There may still be a bug in another bc library function - I think it was
s() (sine) - which used an undeclared variable `t'.  This caused no problems
unless it was called from a program which also used `t'.

				David Wood

				dcw@ukc.UUCP
				...!vax135!ukc!dcw