xref: /reactos/sdk/lib/crt/math/fabsf.c (revision 10e7643c)
1 /*
2  * PROJECT:     ReactOS CRT library
3  * LICENSE:     MIT (https://spdx.org/licenses/MIT)
4  * PURPOSE:     Portable implementation of fabsf
5  * COPYRIGHT:   Copyright 2021 Timo Kreuzer <timo.kreuzer@reactos.org>
6  */
7 
8 #include <math.h>
9 
10 _Check_return_
11 float
12 __cdecl
13 fabsf(
14     _In_ float x)
15 {
16     /* Load the value as uint */
17     unsigned int u32 = *(unsigned int*)&x;
18 
19     /* Clear the sign bit */
20     u32 &= ~(1 << 31);
21 
22     /* Check for NAN */
23     if (u32 > 0x7F800000)
24     {
25         /* Set error bit */
26         *(unsigned int*)&x |= 0x00400000;
27         return x;
28     }
29 
30     /* Convert back to float */
31     return *(float*)&u32;
32 }
33