fun9_xrotg.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. //
  2. // File: xrotg.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_xrotg.h"
  9. #include "rt_nonfinite.h"
  10. #include <cmath>
  11. // Function Definitions
  12. //
  13. // Arguments : double *a
  14. // double *b
  15. // double *c
  16. // double *s
  17. // Return Type : void
  18. //
  19. namespace coder {
  20. namespace internal {
  21. namespace blas {
  22. void xrotg(double *a, double *b, double *c, double *s)
  23. {
  24. double absa;
  25. double absb;
  26. double roe;
  27. double scale;
  28. roe = *b;
  29. absa = std::abs(*a);
  30. absb = std::abs(*b);
  31. if (absa > absb) {
  32. roe = *a;
  33. }
  34. scale = absa + absb;
  35. if (scale == 0.0) {
  36. *s = 0.0;
  37. *c = 1.0;
  38. *a = 0.0;
  39. *b = 0.0;
  40. } else {
  41. double ads;
  42. double bds;
  43. ads = absa / scale;
  44. bds = absb / scale;
  45. scale *= std::sqrt(ads * ads + bds * bds);
  46. if (roe < 0.0) {
  47. scale = -scale;
  48. }
  49. *c = *a / scale;
  50. *s = *b / scale;
  51. if (absa > absb) {
  52. *b = *s;
  53. } else if (*c != 0.0) {
  54. *b = 1.0 / *c;
  55. } else {
  56. *b = 1.0;
  57. }
  58. *a = scale;
  59. }
  60. }
  61. } // namespace blas
  62. } // namespace internal
  63. } // namespace coder
  64. //
  65. // File trailer for xrotg.cpp
  66. //
  67. // [EOF]
  68. //