diff options
| author | Szabolcs Nagy <nsz@port70.net> | 2012-11-13 21:54:32 +0100 | 
|---|---|---|
| committer | Szabolcs Nagy <nsz@port70.net> | 2012-11-13 21:54:32 +0100 | 
| commit | 529a8de46cbf6cce525ab25c4532822006502f29 (patch) | |
| tree | 96eb7a3856ad9280f1b308d67069580ff55d558a /src | |
| parent | 6d3f1a39c14b12026df84f386875b094e3652990 (diff) | |
| download | musl-529a8de46cbf6cce525ab25c4532822006502f29.tar.gz | |
math: simplify hypot and hypotf using scalbn
this also fixes overflow/underflow raising and excess
precision issues (as those are handled well in scalbn)
Diffstat (limited to 'src')
| -rw-r--r-- | src/math/hypot.c | 9 | ||||
| -rw-r--r-- | src/math/hypotf.c | 6 | 
2 files changed, 4 insertions, 11 deletions
diff --git a/src/math/hypot.c b/src/math/hypot.c index ba4c7575..9a4cbdb3 100644 --- a/src/math/hypot.c +++ b/src/math/hypot.c @@ -117,12 +117,7 @@ double hypot(double x, double y)  		t2 = a - t1;  		w  = sqrt(t1*y1-(w*(-w)-(t1*y2+t2*b)));  	} -	if (k != 0) { -		uint32_t high; -		t1 = 1.0; -		GET_HIGH_WORD(high, t1); -		SET_HIGH_WORD(t1, high+(k<<20)); -		return t1*w; -	} +	if (k) +		w = scalbn(w, k);  	return w;  } diff --git a/src/math/hypotf.c b/src/math/hypotf.c index 9fd77e6a..4d80178d 100644 --- a/src/math/hypotf.c +++ b/src/math/hypotf.c @@ -80,9 +80,7 @@ float hypotf(float x, float y)  		t2 = a - t1;  		w  = sqrtf(t1*y1-(w*(-w)-(t1*y2+t2*b)));  	} -	if (k != 0) { -		SET_FLOAT_WORD(t1, 0x3f800000+(k<<23)); -		return t1*w; -	} +	if (k) +		w = scalbnf(w, k);  	return w;  }  | 
