1: /*	@(#)sqrt.c	4.1	12/25/82	*/
   2: 
   3: /*
   4: 	sqrt returns the square root of its floating
   5: 	point argument. Newton's method.
   6: 
   7: 	calls frexp
   8: */
   9: 
  10: #include <errno.h>
  11: 
  12: int errno;
  13: double frexp();
  14: 
  15: double
  16: sqrt(arg)
  17: double arg;
  18: {
  19:     double x, temp;
  20:     int exp;
  21:     int i;
  22: 
  23:     if(arg <= 0.) {
  24:         if(arg < 0.)
  25:             errno = EDOM;
  26:         return(0.);
  27:     }
  28:     x = frexp(arg,&exp);
  29:     while(x < 0.5) {
  30:         x *= 2;
  31:         exp--;
  32:     }
  33:     /*
  34: 	 * NOTE
  35: 	 * this wont work on 1's comp
  36: 	 */
  37:     if(exp & 1) {
  38:         x *= 2;
  39:         exp--;
  40:     }
  41:     temp = 0.5*(1.0+x);
  42: 
  43:     while(exp > 60) {
  44:         temp *= (1L<<30);
  45:         exp -= 60;
  46:     }
  47:     while(exp < -60) {
  48:         temp /= (1L<<30);
  49:         exp += 60;
  50:     }
  51:     if(exp >= 0)
  52:         temp *= 1L << (exp/2);
  53:     else
  54:         temp /= 1L << (-exp/2);
  55:     for(i=0; i<=4; i++)
  56:         temp = 0.5*(temp + arg/temp);
  57:     return(temp);
  58: }

Defined functions

Defined variables

errno defined in line 12; used 1 times
  • in line 25
Last modified: 1985-06-05
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 878
Valid CSS Valid XHTML 1.0 Strict