matrix.hpp 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #ifndef MATRIX_HPP
  2. #define MATRIX_HPP
  3. #include <iostream>
  4. #include <immintrin.h>
  5. #include <mpfr.h>
  6. #include "config.hpp"
  7. using namespace std;
  8. class Matrix{
  9. protected:
  10. size_t nr,nc;
  11. mpfr_t* data;
  12. public:
  13. Matrix();
  14. ~Matrix();
  15. void init(size_t n);
  16. void init(size_t nrow,size_t ncol);
  17. mpfr_srcptr get(size_t i,size_t j) const;
  18. mpfr_ptr get(size_t i,size_t j);
  19. void set(size_t i,size_t j,mpfr_t x);
  20. void clear();
  21. void display();
  22. void swap_lines(size_t i,size_t j);
  23. void mul_line(size_t i,mpfr_t a);
  24. void add_mul_line(size_t i,size_t j,mpfr_t a);
  25. void Gauss(mpfr_t det);
  26. };
  27. //******************
  28. //* Inline methods *
  29. //******************
  30. inline
  31. Matrix::Matrix(){
  32. nr=0;
  33. nc=0;
  34. data=nullptr;
  35. }
  36. inline void
  37. Matrix::init(size_t n){
  38. return init(n,n);
  39. }
  40. inline mpfr_srcptr
  41. Matrix::get(size_t i,size_t j) const{
  42. return data[i*nc+j];
  43. }
  44. inline mpfr_ptr
  45. Matrix::get(size_t i,size_t j){
  46. return data[i*nc+j];
  47. }
  48. inline void
  49. Matrix::set(size_t i,size_t j,mpfr_t x){
  50. mpfr_set(data[i*nc+j],x,MPFR_RNDN);
  51. }
  52. #endif