ReactOS  0.4.15-dev-5112-g22d8c0f
fabs.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS CRT library
3  * LICENSE: MIT (https://spdx.org/licenses/MIT)
4  * PURPOSE: Portable implementation of fabs
5  * COPYRIGHT: Copyright 2021 Timo Kreuzer <timo.kreuzer@reactos.org>
6  */
7 
8 #include <math.h>
9 
10 #ifdef _MSC_VER
11 #pragma function(fabs)
12 #endif
13 
15 double
16 __cdecl
18  _In_ double x)
19 {
20  /* Load the value as uint64 */
21  unsigned long long u64 = *(unsigned long long*)&x;
22 
23  /* Clear the sign bit */
24  u64 &= ~(1ULL << 63);
25 
26  /* Check for NAN */
27  if (u64 > 0x7FF0000000000000ull)
28  {
29 #ifdef _M_IX86
30  /* Set error bit */
31  *(unsigned long long*)&x |= 0x0008000000000000ull;
32 #endif
33  return x;
34  }
35 
36  /* Convert back to double */
37  return *(double*)&u64;
38 }
#define __cdecl
Definition: accygwin.h:79
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
_Check_return_ double __cdecl fabs(_In_ double x)
Definition: fabs.c:17
#define _In_
Definition: ms_sal.h:308
#define ULL(a, b)
Definition: format_msg.c:27
ULONG64 u64
Definition: btrfs.h:15
#define _Check_return_
Definition: ms_sal.h:557