rt_nonfinite.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. //
  2. // File: rt_nonfinite.cpp
  3. //
  4. // Code generated for Simulink model 'PmsmSimUt'.
  5. //
  6. // Model version : 1.18
  7. // Simulink Coder version : 9.4 (R2020b) 29-Jul-2020
  8. // C/C++ source code generated on : Tue Aug 1 23:42:37 2023
  9. //
  10. // Target selection: ert.tlc
  11. // Embedded hardware selection: Intel->x86-64 (Windows64)
  12. // Code generation objectives: Unspecified
  13. // Validation result: Not run
  14. //
  15. //
  16. // Abstract:
  17. // Function to initialize non-finites,
  18. // (Inf, NaN and -Inf).
  19. #include "rt_nonfinite.h"
  20. #include "rtGetNaN.h"
  21. #include "rtGetInf.h"
  22. #define NumBitsPerChar 8U
  23. extern "C" {
  24. real_T rtInf;
  25. real_T rtMinusInf;
  26. real_T rtNaN;
  27. real32_T rtInfF;
  28. real32_T rtMinusInfF;
  29. real32_T rtNaNF;
  30. }
  31. extern "C"
  32. {
  33. //
  34. // Initialize the rtInf, rtMinusInf, and rtNaN needed by the
  35. // generated code. NaN is initialized as non-signaling. Assumes IEEE.
  36. //
  37. void rt_InitInfAndNaN(size_t realSize)
  38. {
  39. (void) (realSize);
  40. rtNaN = rtGetNaN();
  41. rtNaNF = rtGetNaNF();
  42. rtInf = rtGetInf();
  43. rtInfF = rtGetInfF();
  44. rtMinusInf = rtGetMinusInf();
  45. rtMinusInfF = rtGetMinusInfF();
  46. }
  47. // Test if value is infinite
  48. boolean_T rtIsInf(real_T value)
  49. {
  50. return (boolean_T)((value==rtInf || value==rtMinusInf) ? 1U : 0U);
  51. }
  52. // Test if single-precision value is infinite
  53. boolean_T rtIsInfF(real32_T value)
  54. {
  55. return (boolean_T)(((value)==rtInfF || (value)==rtMinusInfF) ? 1U : 0U);
  56. }
  57. // Test if value is not a number
  58. boolean_T rtIsNaN(real_T value)
  59. {
  60. boolean_T result = (boolean_T) 0;
  61. size_t bitsPerReal = sizeof(real_T) * (NumBitsPerChar);
  62. if (bitsPerReal == 32U) {
  63. result = rtIsNaNF((real32_T)value);
  64. } else {
  65. union {
  66. LittleEndianIEEEDouble bitVal;
  67. real_T fltVal;
  68. } tmpVal;
  69. tmpVal.fltVal = value;
  70. result = (boolean_T)((tmpVal.bitVal.words.wordH & 0x7FF00000) ==
  71. 0x7FF00000 &&
  72. ( (tmpVal.bitVal.words.wordH & 0x000FFFFF) != 0 ||
  73. (tmpVal.bitVal.words.wordL != 0) ));
  74. }
  75. return result;
  76. }
  77. // Test if single-precision value is not a number
  78. boolean_T rtIsNaNF(real32_T value)
  79. {
  80. IEEESingle tmp;
  81. tmp.wordL.wordLreal = value;
  82. return (boolean_T)( (tmp.wordL.wordLuint & 0x7F800000) == 0x7F800000 &&
  83. (tmp.wordL.wordLuint & 0x007FFFFF) != 0 );
  84. }
  85. }
  86. //
  87. // File trailer for generated code.
  88. //
  89. // [EOF]
  90. //