25 Expression * BinomialCoefficient::shallowReduce(
Context& context, AngleUnit angleUnit) {
26 Expression * e = Expression::shallowReduce(context, angleUnit);
32 #if MATRIX_EXACT_REDUCING 39 if (!r0->denominator().isOne() || r0->numerator().isNegative()) {
45 if (!r1->denominator().isOne() || r1->numerator().isNegative()) {
55 Integer n = r0->numerator();
56 Integer k = r1->numerator();
57 if (n.isLowerThan(k)) {
62 if (Integer(k_maxNValue).isLowerThan(n)) {
67 k = kBis.isLowerThan(k) ? kBis : k;
68 int clippedK = k.extractedInt();
69 for (
int i = 0; i < clippedK; i++) {
76 ExpressionLayout * BinomialCoefficient::privateCreateLayout(
PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat)
const {
79 ExpressionLayout * childrenLayouts[2];
82 return new ParenthesisLayout(
new GridLayout(childrenLayouts, 2, 1));
86 Expression * BinomialCoefficient::templatedApproximate(Context& context, AngleUnit angleUnit)
const {
92 T n =
static_cast<Complex<T> *
>(nInput)->toScalar();
93 T k =
static_cast<Complex<T> *
>(kInput)->toScalar();
102 k = k > (n-k) ? n-k : k;
107 for (
int i = 0; i < k; i++) {
108 result *= (n-(
T)i)/(k-(
T)i);
friend class Multiplication
Expression * replaceWith(Expression *newOperand, bool deleteAfterReplace=true)
Expression * approximate(Context &context, AngleUnit angleUnit=AngleUnit::Default) const
Expression * editableOperand(int i)
Expression * clone() const override
const Expression * m_operands[T]
Type type() const override
friend class BinomialCoefficient
ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode=PrintFloat::Mode::Default, ComplexFormat complexFormat=ComplexFormat::Default) const
static Complex< T > Float(T x)
static Integer Subtraction(const Integer &i, const Integer &j)
const Expression * operand(int i) const
static T compute(T k, T n)