File: rtGetNaN.c

    1   /*
    2    * File: rtGetNaN.c
    3    *
    4    * MATLAB Coder version            : 3.0
    5    * C/C++ source code generated on  : 09-Nov-2018 15:50:30
    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