diff options
author | David Schultz <das@FreeBSD.org> | 2005-03-07 04:57:50 +0000 |
---|---|---|
committer | David Schultz <das@FreeBSD.org> | 2005-03-07 04:57:50 +0000 |
commit | 7b6a19039d48b2a58d953952dafec6d160fdbcba (patch) | |
tree | ceda361033a445d067df1d52d61cec0a55d5bd7d /lib | |
parent | caacab9b5ff1a273252ae9272a26b68fae8db0fa (diff) | |
download | src-7b6a19039d48b2a58d953952dafec6d160fdbcba.tar.gz src-7b6a19039d48b2a58d953952dafec6d160fdbcba.zip |
- 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).
Notes
Notes:
svn path=/head/; revision=143219
Diffstat (limited to 'lib')
-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 73b1d27de17f..d609d4e8b3d4 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)); } |