Re: Bug in StruveH

*To*: mathgroup at yoda.ncsa.uiuc.edu*Subject*: Re: Bug in StruveH*From*: Steve Christensen <stevec at yoda.ncsa.uiuc.edu>*Date*: Sun, 10 Feb 91 18:07:20 +0100

pjanhune at finsun.csc.fi writes: > The package StruveH.m from the book by Roman Maeder contains the > following bug: > > When called with an integer or rational second argument, the function > StruveH returns an exact-looking result, which is WRONG!! It's only > the first term of the series expansion. For floating-point arguments > or complex numbers the function behaves correctly. One cure is to insert > the line > .... There is indeed a bug in the numerical code of Struve[]. It should not be called with an exact second argument. Therefore the rule should be made conditional as follows: (* numerical evaluation *) StruveH[nu_?NumberQ, z_?NumberQ] := Block[{s=0, so=-1, m=0, prec = Precision[z], z2 = -(z/2)^2,k1 = 3/2, k2 = nu + 3/2, g1, g2, zf}, zf = (z/2)^(nu+1); g1 = Gamma[k1]; g2 = Gamma[k2]; While[so != s, so = s; s += N[zf/g1/g2, prec]; g1 *= k1; g2 *= k2; zf *= z2; k1++; k2++; m++ ]; s ] /; Precision[z] < Infinity (The proposed fix by pjanhune at finsun.csc.fi has the disadvantage of giving an inexact result for exact input. This is contrary to Mathematica's philosophy. One should use N[StruveH[...]] for this.) This has already been fixed for the second edition of my book. All the packages from the book will be part of Mathematica 2.0. Roman Maeder