about summary refs log tree commit diff
path: root/sysdeps/ieee754/dbl-64/s_scalbn.c
diff options
context:
space:
mode:
authorOndřej Bílka <neleai@seznam.cz>2013-10-17 16:03:24 +0200
committerOndřej Bílka <neleai@seznam.cz>2013-10-17 16:03:24 +0200
commitc5d5d574cbfa96d0f6c1db24d1e072c472627e41 (patch)
tree83b97e29ee65636dfe1247ea8d2344ca3f0b04b4 /sysdeps/ieee754/dbl-64/s_scalbn.c
parente5c2c2d0c0315ca24cc9cd638cdb1a2d8dcc4b0d (diff)
downloadglibc-c5d5d574cbfa96d0f6c1db24d1e072c472627e41.tar.gz
glibc-c5d5d574cbfa96d0f6c1db24d1e072c472627e41.tar.xz
glibc-c5d5d574cbfa96d0f6c1db24d1e072c472627e41.zip
Format floating routines.
Diffstat (limited to 'sysdeps/ieee754/dbl-64/s_scalbn.c')
-rw-r--r--sysdeps/ieee754/dbl-64/s_scalbn.c61
1 files changed, 33 insertions, 28 deletions
diff --git a/sysdeps/ieee754/dbl-64/s_scalbn.c b/sysdeps/ieee754/dbl-64/s_scalbn.c
index 1f302557ef..6e7d5ad217 100644
--- a/sysdeps/ieee754/dbl-64/s_scalbn.c
+++ b/sysdeps/ieee754/dbl-64/s_scalbn.c
@@ -20,38 +20,43 @@
 #include <math_private.h>
 
 static const double
-two54   =  1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
-twom54  =  5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
-huge   = 1.0e+300,
-tiny   = 1.0e-300;
+  two54 = 1.80143985094819840000e+16,  /* 0x43500000, 0x00000000 */
+  twom54 = 5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
+  huge = 1.0e+300,
+  tiny = 1.0e-300;
 
 double
 __scalbn (double x, int n)
 {
-	int32_t k,hx,lx;
-	EXTRACT_WORDS(hx,lx,x);
-	k = (hx&0x7ff00000)>>20;		/* extract exponent */
-	if (__builtin_expect(k==0, 0)) {	/* 0 or subnormal x */
-	    if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
-	    x *= two54;
-	    GET_HIGH_WORD(hx,x);
-	    k = ((hx&0x7ff00000)>>20) - 54;
-	    }
-	if (__builtin_expect(k==0x7ff, 0)) return x+x;	/* NaN or Inf */
-	if (__builtin_expect(n< -50000, 0))
-	  return tiny*__copysign(tiny,x); /*underflow*/
-	if (__builtin_expect(n> 50000 || k+n > 0x7fe, 0))
-	  return huge*__copysign(huge,x); /* overflow  */
-	/* Now k and n are bounded we know that k = k+n does not
-	   overflow.  */
-	k = k+n;
-	if (__builtin_expect(k > 0, 1))		/* normal result */
-	    {SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20)); return x;}
-	if (k <= -54)
-	  return tiny*__copysign(tiny,x); 	/*underflow*/
-	k += 54;				/* subnormal result */
-	SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20));
-	return x*twom54;
+  int32_t k, hx, lx;
+  EXTRACT_WORDS (hx, lx, x);
+  k = (hx & 0x7ff00000) >> 20;                  /* extract exponent */
+  if (__builtin_expect (k == 0, 0))             /* 0 or subnormal x */
+    {
+      if ((lx | (hx & 0x7fffffff)) == 0)
+	return x;                                  /* +-0 */
+      x *= two54;
+      GET_HIGH_WORD (hx, x);
+      k = ((hx & 0x7ff00000) >> 20) - 54;
+    }
+  if (__builtin_expect (k == 0x7ff, 0))
+    return x + x;                                       /* NaN or Inf */
+  if (__builtin_expect (n < -50000, 0))
+    return tiny * __copysign (tiny, x);   /*underflow*/
+  if (__builtin_expect (n > 50000 || k + n > 0x7fe, 0))
+    return huge * __copysign (huge, x);   /* overflow  */
+  /* Now k and n are bounded we know that k = k+n does not
+     overflow.  */
+  k = k + n;
+  if (__builtin_expect (k > 0, 1))              /* normal result */
+    {
+      SET_HIGH_WORD (x, (hx & 0x800fffff) | (k << 20)); return x;
+    }
+  if (k <= -54)
+    return tiny * __copysign (tiny, x);         /*underflow*/
+  k += 54;                                      /* subnormal result */
+  SET_HIGH_WORD (x, (hx & 0x800fffff) | (k << 20));
+  return x * twom54;
 }
 weak_alias (__scalbn, scalbn)
 #ifdef NO_LONG_DOUBLE