30 lines
325 B
C
30 lines
325 B
C
#include <math.h>
|
|
/*
|
|
* sqrt(a^2 + b^2)
|
|
* (but carefully)
|
|
*/
|
|
|
|
double
|
|
hypot(double a, double b)
|
|
{
|
|
double t;
|
|
|
|
if(a < 0)
|
|
a = -a;
|
|
if(b < 0)
|
|
b = -b;
|
|
if(a > b) {
|
|
t = a;
|
|
a = b;
|
|
b = t;
|
|
}
|
|
if(b == 0)
|
|
return 0;
|
|
a /= b;
|
|
/*
|
|
* pathological overflow possible
|
|
* in the next line.
|
|
*/
|
|
return b * sqrt(1 + a*a);
|
|
}
|