1/*
2 * rtGetNaN.c
3 *
4 * Code generation for model "BMS".
5 *
6 * Model version : 1.15
7 * Simulink Coder version : 9.2 (R2019b) 18-Jul-2019
8 * C source code generated on : Thu Aug 20 14:49:14 2020
9 *
10 * Target selection: grt.tlc
11 * Note: GRT includes extra infrastructure and instrumentation for prototyping
12 * Embedded hardware selection: Intel->x86-64 (Windows64)
13 * Code generation objectives: Unspecified
14 * Validation result: Not run
15 */
16
17/*
18 * Abstract:
19 * Function to initialize non-finite, NaN
20 */
21#include "rtGetNaN.h"
22#define NumBitsPerChar 8U
23
24/*
25 * Initialize rtNaN needed by the generated code.
26 * NaN is initialized as non-signaling. Assumes IEEE.
27 */
28real_T rtGetNaN(void)
29{
30 size_t bitsPerReal = sizeof(real_T) * (NumBitsPerChar);
31 real_T nan = 0.0;
32 if (bitsPerReal == 32U) {
33 nan = rtGetNaNF();
34 } else {
35 uint16_T one = 1U;
36 enum {
37 LittleEndian,
38 BigEndian
39 } machByteOrder = (*((uint8_T *) &one) == 1U) ? LittleEndian : BigEndian;
40 switch (machByteOrder) {
41 case LittleEndian:
42 {
43 union {
44 LittleEndianIEEEDouble bitVal;
45 real_T fltVal;
46 } tmpVal;
47
48 tmpVal.bitVal.words.wordH = 0xFFF80000U;
49 tmpVal.bitVal.words.wordL = 0x00000000U;
50 nan = tmpVal.fltVal;
51 break;
52 }
53
54 case BigEndian:
55 {
56 union {
57 BigEndianIEEEDouble bitVal;
58 real_T fltVal;
59 } tmpVal;
60
61 tmpVal.bitVal.words.wordH = 0x7FFFFFFFU;
62 tmpVal.bitVal.words.wordL = 0xFFFFFFFFU;
63 nan = tmpVal.fltVal;
64 break;
65 }
66 }
67 }
68
69 return nan;
70}
71
72/*
73 * Initialize rtNaNF needed by the generated code.
74 * NaN is initialized as non-signaling. Assumes IEEE.
75 */
76real32_T rtGetNaNF(void)
77{
78 IEEESingle nanF = { { 0 } };
79
80 uint16_T one = 1U;
81 enum {
82 LittleEndian,
83 BigEndian
84 } machByteOrder = (*((uint8_T *) &one) == 1U) ? LittleEndian : BigEndian;
85 switch (machByteOrder) {
86 case LittleEndian:
87 {
88 nanF.wordL.wordLuint = 0xFFC00000U;
89 break;
90 }
91
92 case BigEndian:
93 {
94 nanF.wordL.wordLuint = 0x7FFFFFFFU;
95 break;
96 }
97 }
98
99 return nanF.wordL.wordLreal;
100}
101