1 /*
2 * File: rtGetNaN.c
3 *
4 * MATLAB Coder version : 3.1
5 * C/C++ source code generated on : 22-Apr-2021 15:58:03
6 */
7
8 /*
9 * Abstract:
10 * MATLAB for code generation function to initialize non-finite, NaN
11 */
12 #include "rtGetNaN.h"
13 #define NumBitsPerChar 8U
14
15 /* Function: rtGetNaN ==================================================
16 * Abstract:
17 * Initialize rtNaN needed by the generated code.
18 * NaN is initialized as non-signaling. Assumes IEEE.
19 */
20 real_T rtGetNaN(void)
21 {
22 size_t bitsPerReal = sizeof(real_T) * (NumBitsPerChar);
23 real_T nan = 0.0;
24 if (bitsPerReal == 32U) {
25 nan = rtGetNaNF();
26 } else {
27 uint16_T one = 1U;
28 enum {
29 LittleEndian,
30 BigEndian
31 } machByteOrder = (*((uint8_T *) &one) == 1U) ? LittleEndian : BigEndian;
32 switch (machByteOrder) {
33 case LittleEndian:
34 {
35 union {
36 LittleEndianIEEEDouble bitVal;
37 real_T fltVal;
38 } tmpVal;
39
40 tmpVal.bitVal.words.wordH = 0xFFF80000U;
41 tmpVal.bitVal.words.wordL = 0x00000000U;
42 nan = tmpVal.fltVal;
43 break;
44 }
45
46 case BigEndian:
47 {
48 union {
49 BigEndianIEEEDouble bitVal;
50 real_T fltVal;
51 } tmpVal;
52
53 tmpVal.bitVal.words.wordH = 0x7FFFFFFFU;
54 tmpVal.bitVal.words.wordL = 0xFFFFFFFFU;
55 nan = tmpVal.fltVal;
56 break;
57 }
58 }
59 }
60
61 return nan;
62 }
63
64 /* Function: rtGetNaNF ==================================================
65 * Abstract:
66 * Initialize rtNaNF needed by the generated code.
67 * NaN is initialized as non-signaling. Assumes IEEE.
68 */
69 real32_T rtGetNaNF(void)
70 {
71 IEEESingle nanF = { { 0 } };
72
73 uint16_T one = 1U;
74 enum {
75 LittleEndian,
76 BigEndian
77 } machByteOrder = (*((uint8_T *) &one) == 1U) ? LittleEndian : BigEndian;
78 switch (machByteOrder) {
79 case LittleEndian:
80 {
81 nanF.wordL.wordLuint = 0xFFC00000U;
82 break;
83 }
84
85 case BigEndian:
86 {
87 nanF.wordL.wordLuint = 0x7FFFFFFFU;
88 break;
89 }
90 }
91
92 return nanF.wordL.wordLreal;
93 }
94
95 /*
96 * File trailer for rtGetNaN.c
97 *
98 * [EOF]
99 */
100
|