summaryrefslogtreecommitdiffstats
path: root/lib/msun
diff options
context:
space:
mode:
authordas <das@FreeBSD.org>2005-03-07 04:57:50 +0000
committerdas <das@FreeBSD.org>2005-03-07 04:57:50 +0000
commit6bde47de7886c64ef75ad4d626d23f8e3d1dab8f (patch)
treeceda361033a445d067df1d52d61cec0a55d5bd7d /lib/msun
parentbe070dc174759c8e71d6dac44a073af7a58e92b1 (diff)
downloadFreeBSD-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')
-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 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));
}
OpenPOWER on IntegriCloud