Advertisement
wowonline

Untitled

Apr 6th, 2022
723
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <array>
  2. #include <complex>
  3. #include <utility>
  4. #include <vector>
  5. #include <math.h>
  6.  
  7.  
  8.  
  9. namespace Equations {
  10.  
  11. template<typename t>
  12. std::pair<bool, std::vector<std::complex<t> > > quadratic(std::array< std::complex<t>, 3> arr)
  13. {
  14.     std::pair<bool, std::vector<std::complex<t> > > p;
  15.     if (std::norm(arr[2] < std::numeric_limits<t>::eplsilon()) &&
  16.         std::norm(arr[1] < std::numeric_limits<t>::eplsilon()) &&
  17.         std::norm(arr[0] < std::numeric_limits<t>::eplsilon())) {
  18.         p.first = false;
  19.     } else if (std::norm(arr[2] < std::numeric_limits<t>::eplsilon()) &&
  20.                 std::norm(arr[1] < std::numeric_limits<t>::eplsilon()) &&
  21.                 std::norm(arr[0] >= std::numeric_limits<t>::eplsilon())) {
  22.         p.first = true;
  23.     } else if (std::norm(arr[2] < std::numeric_limits<t>::eplsilon())) {
  24.         std::vector<t> v = {-arr[1]/arr[2]};
  25.         p.first = true;
  26.         p.second = v;
  27.     } else {
  28.         std::vector<t> v;
  29.         std::complex<t> d = arr[1] * arr[1] - std::complex(4) * arr[2] * arr[0];
  30.         v.push_back((-arr[1] - std::sqrt(d))/(std::complex(2) * arr[2]));
  31.         v.push_back((-arr[1] + std::sqrt(d))/(std::complex(2) * arr[2]));
  32.  
  33.         p.first = true;
  34.         p.second = v;
  35.     }
  36.  
  37.     return p;
  38. }
  39.  
  40. }
  41. // std::norm(arr[0] < std::norm_limits<t>::eplsilon())
  42.  
  43. /*если все нули - беск много а =0  - линейное
  44. а =0 и б=0 с != 0 , то нет реш иначе (b^2 +- sqrt(d)) / 2a*/
Advertisement
RAW Paste Data Copied
Advertisement