diff options
author | das <das@FreeBSD.org> | 2005-03-07 04:57:50 +0000 |
---|---|---|
committer | das <das@FreeBSD.org> | 2005-03-07 04:57:50 +0000 |
commit | 6bde47de7886c64ef75ad4d626d23f8e3d1dab8f (patch) | |
tree | ceda361033a445d067df1d52d61cec0a55d5bd7d /lib/msun/src/s_scalbln.c | |
parent | be070dc174759c8e71d6dac44a073af7a58e92b1 (diff) | |
download | FreeBSD-src-6bde47de7886c64ef75ad4d626d23f8e3d1dab8f.zip FreeBSD-src-6bde47de7886c64ef75ad4d626d23f8e3d1dab8f.tar.gz |
- 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).
Diffstat (limited to 'lib/msun/src/s_scalbln.c')
-rw-r--r-- | lib/msun/src/s_scalbln.c | 36 |
1 files changed, 34 insertions, 2 deletions
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 <sys/cdefs.h> __FBSDID("$FreeBSD$"); +#include <limits.h> #include <math.h> 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)); } |