aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDavid Schultz <das@FreeBSD.org>2005-03-07 04:57:50 +0000
committerDavid Schultz <das@FreeBSD.org>2005-03-07 04:57:50 +0000
commit7b6a19039d48b2a58d953952dafec6d160fdbcba (patch)
treeceda361033a445d067df1d52d61cec0a55d5bd7d /lib
parentcaacab9b5ff1a273252ae9272a26b68fae8db0fa (diff)
downloadsrc-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.c36
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));
}