ReactOS 0.4.16-dev-303-g11d5cb8
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
15double
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
ULONG64 u64
Definition: btrfs.h:15
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
_Check_return_ _CRT_JIT_INTRINSIC double __cdecl fabs(_In_ double x)
Definition: fabs.c:17
#define _Check_return_
Definition: no_sal2.h:60
#define _In_
Definition: no_sal2.h:158