From 6bde47de7886c64ef75ad4d626d23f8e3d1dab8f Mon Sep 17 00:00:00 2001 From: das Date: Mon, 7 Mar 2005 04:57:50 +0000 Subject: - Implement scalblnl. - In scalbln and scalblnf, check the bounds of the second argument. This is probably unnecessary, but strictly speaking, we should report an error if someone tries to compute scalbln(x, INT_MAX + 1ll). --- lib/msun/src/s_scalbln.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) (limited to 'lib/msun/src') diff --git a/lib/msun/src/s_scalbln.c b/lib/msun/src/s_scalbln.c index 73b1d27..d609d4e 100644 --- a/lib/msun/src/s_scalbln.c +++ b/lib/msun/src/s_scalbln.c @@ -27,18 +27,50 @@ #include __FBSDID("$FreeBSD$"); +#include #include double scalbln (double x, long n) { + int in; - return (scalbn(x, (int)n)); + in = (int)n; + if (in != n) { + if (n > 0) + in = INT_MAX; + else + in = INT_MIN; + } + return (scalbn(x, in)); } float scalblnf (float x, long n) { + int in; - return (scalbnf(x, (int)n)); + in = (int)n; + if (in != n) { + if (n > 0) + in = INT_MAX; + else + in = INT_MIN; + } + return (scalbnf(x, in)); +} + +long double +scalblnl (long double x, long n) +{ + int in; + + in = (int)n; + if (in != n) { + if (n > 0) + in = INT_MAX; + else + in = INT_MIN; + } + return (scalbnl(x, (int)n)); } -- cgit v1.1