# Bug#182574: libc6: The pow() function gives incorrect results on special cases (nan, inf...)

At Thu, 27 Feb 2003 09:58:21 +0100,
Vincent Lefevre wrote:
> On Thu, Feb 27, 2003 at 16:16:18 +0900, GOTO Masanori wrote:
> > At Wed, 26 Feb 2003 17:49:16 +0100,
> > Vincent Lefevre wrote:
> > > 2) pow(-inf, 0.5) = inf
> > >    pow(-inf, -0.5) = 0
> > >    The result should be nan in both cases.
> >
> > No.
> >
> > 	pow(-inf, y) returns +inf for y > 0 and not an odd integer.
> > 	pow(-inf, y) returns +0 for y < 0 and not an odd integer.
> >
> > So, it's fully satisfied ISO C99.
>
> I disagree. I only have a draft of the ISO C99 standard, but it says:
>
>        [#2] The pow functions compute x raised to the power  y.   A
>        domain error occurs if x is negative and y is finite and not
>        an integer value.  A  domain  error  occurs  if  the  result
>        cannot  be  represented when x is zero and y is less than or
>        equal to zero.  A range error may occur.
>
> We are in the case: x negative and y finite but not integer.

Also look at Appendix F.9.4.4. instead of 7.12.7.4-2.

> For instance, pow(-inf, 0.5) would be equivalent to the square root
> of minus infinity, but the square root of a negative number is not
> a real number. pow(x, y) with x negative would be defined only for
> y integer because of the way it is extended to the complex plane.

It seems you're right.

\lim_{n \rightarrow (-inf)} n^(0.5) \rightarrow (-inf)i

Hmm, I confused F.9.4.4. conditions.

> > BTW, I don't have IEEE 754 specification; so please tell me
> > the correct behavior of IEEE 754 if you have it.  I need it
> > to fix this bug.
>
> The IEEE-754 standard doesn't define the behavior of the
> transcendental functions. It is being revised, but nothing
> has been decided yet.

Thanks, so we can say it's ok to believe ISO C99.

Regards,
-- gotom