ReactOS 0.4.15-dev-8349-g6f277e9
sqrt.c File Reference
#include "libm.h"
#include "libm_util.h"
#include "libm_inlines.h"
#include "libm_errno.h"
Include dependency graph for sqrt.c:

Go to the source code of this file.

Macros

#define USE_NAN_WITH_FLAGS
 
#define USE_HANDLE_ERROR
 

Functions

double sqrt (double x)
 

Macro Definition Documentation

◆ USE_HANDLE_ERROR

#define USE_HANDLE_ERROR

Definition at line 34 of file sqrt.c.

◆ USE_NAN_WITH_FLAGS

#define USE_NAN_WITH_FLAGS

Definition at line 33 of file sqrt.c.

Function Documentation

◆ sqrt()

double sqrt ( double  x)

Definition at line 46 of file sqrt.c.

47{
48#if USE_SOFTWARE_SQRT
49 return sqrt_amd_inline(x);
50#else
51 double r;
52 unsigned long long ux;
53 GET_BITS_DP64(x, ux);
54
55 /* Check for special cases for Microsoft error handling */
57 {
58 /* x is infinity, or NaN */
59 if (ux & MANTBITS_DP64)
60 {
61 /* NaN of some sort */
62 /* If it's a signaling NaN, convert to QNaN */
63 return _handle_error("sqrt", OP_SQRT, ux|0x0008000000000000,
64 _DOMAIN, 0,EDOM, x, 0.0, 1);
65 }
66 else
67 {
68 /* +/-infinity */
69 if (ux & SIGNBIT_DP64)
70 {
71 /* - infinity */
72 return _handle_error("sqrt", OP_SQRT, INDEFBITPATT_DP64,
73 _DOMAIN, AMD_F_INVALID, EDOM, x, 0.0, 1);
74 }
75 /* positive infinite is not a problem */
76 }
77 }
78 if ((ux & SIGNBIT_DP64)&&(ux & ~SIGNBIT_DP64)) /* if x < zero */
79 {
80 return _handle_error("sqrt", OP_SQRT, INDEFBITPATT_DP64,
81 _DOMAIN, AMD_F_INVALID, EDOM, x, 0.0, 1);
82 }
83
84 /* VC++ intrinsic call */
86 return r;
87#endif
88}
double __cdecl _handle_error(char *fname, int opcode, unsigned long long value, int type, int flags, int error, double arg1, double arg2, int nargs)
Handles an error condition.
Definition: _handle_error.c:34
#define EDOM
Definition: errno.h:39
__m128d _mm_setzero_pd(void)
Definition: emmintrin.h:1048
__m128d _mm_sqrt_sd(__m128d a, __m128d b)
Definition: emmintrin.h:611
__m128d _mm_load_sd(double const *dp)
Definition: emmintrin.h:991
void _mm_store_sd(double *dp, __m128d a)
Definition: emmintrin.h:1059
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define _DOMAIN
Definition: math.h:39
#define AMD_F_INVALID
Definition: libm_new.h:86
#define INDEFBITPATT_DP64
Definition: libm_util.h:52
#define GET_BITS_DP64(x, ux)
Definition: libm_util.h:118
#define PINFBITPATT_DP64
Definition: libm_util.h:53
#define SIGNBIT_DP64
Definition: libm_util.h:44
#define MANTBITS_DP64
Definition: libm_util.h:46