Christian Cornelssen on Wed, 5 Sep 2001 01:00:41 +0200 (CEST) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: addfrac() + Karatsuba = bug |
On Tue, 4 Sep 2001, Michael Somos wrote: > The following indicates a problem with 'addfrac()' which interacts > badly with the Karatsuba multiplication in the kernel. It only acts > up when the numbers get big enough for Karatsuba to kick in. It is > there in CVS 2.2.1 a few weeks ago. I suggest making the Karatsuba > threshold a 'default()' settable parameter for user convenience. > > parisize = 4000000, primelimit = 500000 > ? add(v1,v2)=[v1[1]*v2[2]+v1[2]*v2[1],v1[2]*v2[2]] > ? equ(v1,v2)=v1[1]*v2[2]==v1[2]*v2[1] > ? frv(x)=[numerator(x),denominator(x)] > ? tst(x1,x2)=equ(frv(x1+x2),add(frv(x1),frv(x2))) > ? rn()=random(N) > ? doit(x,n)= > { > N=x;for(i=1,n, > n0=1+rn;n1=rn;n2=(1+rn)*n0;n3=rn;n4=(1+rn)*n0;print1(tst(n1/n2,n3/n4))) > } > ? doit(10^241,10) > 1011101101 I have tested this on a v2.1.1 built yesterday with most recently-posted patches, and I get zeros, too. For one such case, I have cross-checked add's result with GNU bc, and found it OK. I have also verified that n0 divides both components of the result. It may be worth noting that the numerator of the fractional sum n1/n2 + n3/n4 was correct, and only the denominator came out wrong.