Rational Rational::DIV_QQ_Q(const Rational &a, const Rational &c) { if (a.Z.getSign() != c.Z.getSign()) { Rational result(BigInt::MUL_ZM_Z(BigInt::MUL_ZZ_Z(a.Z, BigInt::TRANS_N_Z(c.N))), Natural::MUL_NN_N(a.N, BigInt::TRANS_Z_N(c.Z))); return RED_Q_Q(result); } Rational result(BigInt::MUL_ZZ_Z(a.Z, BigInt::TRANS_N_Z(c.N)), Natural::MUL_NN_N(a.N, BigInt::TRANS_Z_N(c.Z))); return RED_Q_Q(result); };
Rational Rational::SUB_QQ_Q(const Rational &q1, const Rational &q2) { Rational sub; sub.N = Natural::LCM_NN_N(q1.N, q2.N); Rational q3; q3.Z = BigInt::TRANS_N_Z(sub.N); q3.N = q1.N; Rational q4; q4.Z = BigInt::TRANS_N_Z(sub.N); q4.N = q2.N; sub.Z = BigInt::SUB_ZZ_Z(BigInt::MUL_ZZ_Z(q1.Z, TRANS_Q_Z(RED_Q_Q(q3))), BigInt::MUL_ZZ_Z(q2.Z, TRANS_Q_Z(RED_Q_Q(q4)))); return RED_Q_Q(sub); };
Rational Rational::ADD_QQ_Q(const Rational &q1, const Rational &q2) { Rational add; add.N = Natural::LCM_NN_N(q1.N, q2.N); Rational q3; q3.Z = BigInt::TRANS_N_Z(add.N); q3.N = q1.N; Rational q4; q4.Z = BigInt::TRANS_N_Z(add.N); q4.N = q2.N; add.Z = BigInt::ADD_ZZ_Z(BigInt::MUL_ZZ_Z(q1.Z, TRANS_Q_Z(RED_Q_Q(q3))), BigInt::MUL_ZZ_Z(q2.Z, TRANS_Q_Z(RED_Q_Q(q4)))); return RED_Q_Q(add); };
fraction MUL_QQ_Q(const fraction& Num1, const fraction& Num2) { // умножение дробей fraction Num3; Num3.numerator = MUL_ZZ_Z(Num1.numerator, Num2.numerator); // перемножение числителей первой и второй дробей Num3.denominator = MUL_NN_N(Num1.denominator, Num2.denominator); // перемножение знаменателей первой и второй дробей Num3 = RED_Q_Q(Num3); // упрощение полученной дроби return (Num3); }
Rational Rational::MUL_QQ_Q(const Rational &q1, const Rational &q2) { Rational result(BigInt::MUL_ZZ_Z(q1.Z, q2.Z), Natural::MUL_NN_N(q1.N, q2.N)); return RED_Q_Q(result); };