Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. /* @(#)w_sqrt.c 5.1 93/09/24 */
  3. /*
  4.  * ====================================================
  5.  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
  6.  *
  7.  * Developed at SunPro, a Sun Microsystems, Inc. business.
  8.  * Permission to use, copy, modify, and distribute this
  9.  * software is freely granted, provided that this notice
  10.  * is preserved.
  11.  * ====================================================
  12.  */
  13.  
  14. /*
  15. FUNCTION
  16.         <<sqrt>>, <<sqrtf>>---positive square root
  17.  
  18. INDEX
  19.         sqrt
  20. INDEX
  21.         sqrtf
  22.  
  23. ANSI_SYNOPSIS
  24.         #include <math.h>
  25.         double sqrt(double <[x]>);
  26.         float  sqrtf(float <[x]>);
  27.  
  28. TRAD_SYNOPSIS
  29.         #include <math.h>
  30.         double sqrt(<[x]>);
  31.         float  sqrtf(<[x]>);
  32.  
  33. DESCRIPTION
  34.         <<sqrt>> computes the positive square root of the argument.
  35.         You can modify error handling for this function with
  36.         <<matherr>>.
  37.  
  38. RETURNS
  39.         On success, the square root is returned. If <[x]> is real and
  40.         positive, then the result is positive.  If <[x]> is real and
  41.         negative, the global value <<errno>> is set to <<EDOM>> (domain error).
  42.  
  43.  
  44. PORTABILITY
  45.         <<sqrt>> is ANSI C.  <<sqrtf>> is an extension.
  46. */
  47.  
  48. /*
  49.  * wrapper sqrt(x)
  50.  */
  51.  
  52. #include "fdlibm.h"
  53. #include <errno.h>
  54.  
  55. #ifndef _DOUBLE_IS_32BITS
  56.  
  57. #ifdef __STDC__
  58.         double sqrt(double x)           /* wrapper sqrt */
  59. #else
  60.         double sqrt(x)                  /* wrapper sqrt */
  61.         double x;
  62. #endif
  63. {
  64. #ifdef _IEEE_LIBM
  65.         return __ieee754_sqrt(x);
  66. #else
  67.         struct exception exc;
  68.         double z;
  69.         z = __ieee754_sqrt(x);
  70.         if(_LIB_VERSION == _IEEE_ || isnan(x)) return z;
  71.         if(x<0.0) {
  72.           exc.type = DOMAIN;
  73.           exc.name = "sqrt";
  74.           exc.err = 0;
  75.           exc.arg1 = exc.arg2 = x;
  76.           if (_LIB_VERSION == _SVID_)
  77.             exc.retval = 0.0;
  78.           else
  79.             exc.retval = 0.0/0.0;
  80.           if (_LIB_VERSION == _POSIX_)
  81.             errno = EDOM;
  82.           else if (!matherr(&exc)) {
  83.             errno = EDOM;
  84.           }
  85.           if (exc.err != 0)
  86.             errno = exc.err;
  87.           return exc.retval;
  88.         } else
  89.             return z;
  90. #endif
  91. }
  92.  
  93. #endif /* defined(_DOUBLE_IS_32BITS) */
  94.