提交 529a8de4 编写于 作者: S Szabolcs Nagy

math: simplify hypot and hypotf using scalbn

this also fixes overflow/underflow raising and excess
precision issues (as those are handled well in scalbn)
上级 6d3f1a39
......@@ -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;
}
......@@ -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;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册