32 #include <type_traits>
55 template<
typename dtype>
57 -> std::conditional_t<is_integral_v<dtype>,
int64,
double>
61 using ReturnType = std::conditional_t<is_integral_v<dtype>,
int64,
double>;
65 return static_cast<ReturnType
>(inArray.front());
70 return static_cast<ReturnType
>(inArray(0, 0)) *
static_cast<ReturnType
>(inArray(1, 1)) -
71 static_cast<ReturnType
>(inArray(0, 1)) *
static_cast<ReturnType
>(inArray(1, 0));
76 const auto aei =
static_cast<ReturnType
>(inArray(0, 0)) *
static_cast<ReturnType
>(inArray(1, 1)) *
77 static_cast<ReturnType
>(inArray(2, 2));
78 const auto bfg =
static_cast<ReturnType
>(inArray(0, 1)) *
static_cast<ReturnType
>(inArray(1, 2)) *
79 static_cast<ReturnType
>(inArray(2, 0));
80 const auto cdh =
static_cast<ReturnType
>(inArray(0, 2)) *
static_cast<ReturnType
>(inArray(1, 0)) *
81 static_cast<ReturnType
>(inArray(2, 1));
82 const auto ceg =
static_cast<ReturnType
>(inArray(0, 2)) *
static_cast<ReturnType
>(inArray(1, 1)) *
83 static_cast<ReturnType
>(inArray(2, 0));
84 const auto bdi =
static_cast<ReturnType
>(inArray(0, 1)) *
static_cast<ReturnType
>(inArray(1, 0)) *
85 static_cast<ReturnType
>(inArray(2, 2));
86 const auto afh =
static_cast<ReturnType
>(inArray(0, 0)) *
static_cast<ReturnType
>(inArray(1, 2)) *
87 static_cast<ReturnType
>(inArray(2, 1));
89 return aei + bfg + cdh - ceg - bdi - afh;
92 ReturnType determinant = 0;
99 for (
uint32 i = 1; i < order; ++i)
109 submat(subi, subj++) = inArray(i,
j);
114 determinant += (
sign *
static_cast<ReturnType
>(inArray(0,
c)) *
det(submat, order - 1));
132 template<
typename dtype>
#define THROW_INVALID_ARGUMENT_ERROR(msg)
Definition: Error.hpp:36
#define STATIC_ASSERT_ARITHMETIC(dtype)
Definition: StaticAsserts.hpp:37
Holds 1D and 2D arrays, the main work horse of the NumCpp library.
Definition: NdArrayCore.hpp:72
Shape shape() const noexcept
Definition: NdArrayCore.hpp:4276
A Shape Class for NdArrays.
Definition: Core/Shape.hpp:41
uint32 rows
Definition: Core/Shape.hpp:44
bool issquare() const noexcept
Definition: Core/Shape.hpp:125
constexpr auto j
Definition: Constants.hpp:45
constexpr double c
speed of light
Definition: Constants.hpp:40
auto det(const NdArray< dtype > &inArray, uint32 order) -> std::conditional_t< is_integral_v< dtype >, int64, double >
Definition: det.hpp:56
auto det(const NdArray< dtype > &inArray)
Definition: det.hpp:133
Definition: Coordinate.hpp:45
int8 sign(dtype inValue) noexcept
Definition: sign.hpp:52
std::int64_t int64
Definition: Types.hpp:35
std::uint32_t uint32
Definition: Types.hpp:40