AW: hypot division by zero
"Dehmel, Rüdiger"
de@lmnet.de
Wed Oct 23 22:33:00 GMT 2002
Hi Benjamin,
I don't know how to send a patch.
Testcase depends on config run, because the code is in a #ifndef HAVE_HYPOT
#endif
I my case a mingw cross compiler running on a sparc solaris2.6 has this
problem.
main()
{
printf(%d\n", hypot(0, 0));
}
The lenght of the hypothenuse of a right triangle with side x = 0 and y = 0
is 0!
Even a novice programmer shoud see the missing:
if (s == 0) return (0.);
code lines from libstdc++-v3/libmath/stubs.c
--- snip ---
/* Compute the hypothenuse of a right triangle with side x and y. */
#ifndef HAVE_HYPOTF
float
hypotf(float x, float y)
{
float s = fabsf(x) + fabsf(y);
x /= s; y /= s;
return s * sqrtf(x * x + y * y);
}
#endif
#ifndef HAVE_HYPOT
double
hypot(double x, double y)
{
double s = fabs(x) + fabs(y);
x /= s; y /= s;
return s * sqrt(x * x + y * y);
}
#endif
#ifndef HAVE_HYPOTL
long double
hypotl(long double x, long double y)
{
long double s = fabsl(x) + fabsl(y);
x /= s; y /= s;
return s * sqrtl(x * x + y * y);
}
#endif
--- snip ---
Ruediger
> >the hypot functions in libstdc++-v3/libmath/stubs.c
> >makes a "division by zero" exception when hypot(0, 0) is called.
> >
> >Some thing like:
> >
> >if (s == 0) return (0.);
> >
> >is missing.
> >
> >Other hypot implementations have such a test.
>
> You might want to submit a testcase, and a patch.
>
> -benjamin
More information about the Libstdc++
mailing list