fun9_xnrm2.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. //
  2. // File: xnrm2.cpp
  3. //
  4. // MATLAB Coder version : 5.2
  5. // C/C++ source code generated on : 24-Mar-2023 11:40:08
  6. //
  7. // Include Files
  8. #include "fun9_xnrm2.h"
  9. #include "rt_nonfinite.h"
  10. #include "coder_array.h"
  11. #include <cmath>
  12. // Function Definitions
  13. //
  14. // Arguments : int n
  15. // const ::coder::array<double, 2U> &x
  16. // int ix0
  17. // Return Type : double
  18. //
  19. namespace coder {
  20. namespace internal {
  21. namespace blas {
  22. double xnrm2(int n, const ::coder::array<double, 2U> &x, int ix0)
  23. {
  24. double y;
  25. y = 0.0;
  26. if (n >= 1) {
  27. if (n == 1) {
  28. y = std::abs(x[ix0 - 1]);
  29. } else {
  30. double scale;
  31. int kend;
  32. scale = 3.3121686421112381E-170;
  33. kend = (ix0 + n) - 1;
  34. for (int k{ix0}; k <= kend; k++) {
  35. double absxk;
  36. absxk = std::abs(x[k - 1]);
  37. if (absxk > scale) {
  38. double t;
  39. t = scale / absxk;
  40. y = y * t * t + 1.0;
  41. scale = absxk;
  42. } else {
  43. double t;
  44. t = absxk / scale;
  45. y += t * t;
  46. }
  47. }
  48. y = scale * std::sqrt(y);
  49. }
  50. }
  51. return y;
  52. }
  53. //
  54. // Arguments : int n
  55. // const ::coder::array<double, 1U> &x
  56. // int ix0
  57. // Return Type : double
  58. //
  59. double xnrm2(int n, const ::coder::array<double, 1U> &x, int ix0)
  60. {
  61. double y;
  62. y = 0.0;
  63. if (n >= 1) {
  64. if (n == 1) {
  65. y = std::abs(x[ix0 - 1]);
  66. } else {
  67. double scale;
  68. int kend;
  69. scale = 3.3121686421112381E-170;
  70. kend = (ix0 + n) - 1;
  71. for (int k{ix0}; k <= kend; k++) {
  72. double absxk;
  73. absxk = std::abs(x[k - 1]);
  74. if (absxk > scale) {
  75. double t;
  76. t = scale / absxk;
  77. y = y * t * t + 1.0;
  78. scale = absxk;
  79. } else {
  80. double t;
  81. t = absxk / scale;
  82. y += t * t;
  83. }
  84. }
  85. y = scale * std::sqrt(y);
  86. }
  87. }
  88. return y;
  89. }
  90. } // namespace blas
  91. } // namespace internal
  92. } // namespace coder
  93. //
  94. // File trailer for xnrm2.cpp
  95. //
  96. // [EOF]
  97. //