File: rtGetNaN.c1 /* 2 * File: rtGetNaN.c 3 * 4 * MATLAB Coder version : 3.0 5 * C/C++ source code generated on : 05-Nov-2018 13:41:19 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 |