Lines Matching refs:da
390 # Let g = gcd(da, db). Then
392 # na nb na*db ± nb*da
394 # da db da*db
396 # na*(db//g) ± nb*(da//g) t
398 # (da*db)//g d
402 # Note, that t, (da//g) and (db//g) are pairwise coprime.
404 # Indeed, (da//g) and (db//g) share no common factors (they were
405 # removed) and da is coprime with na (since input fractions are
406 # normalized), hence (da//g) and na are coprime. By symmetry,
409 # gcd(t, da//g) == gcd(na*(db//g), da//g) == 1
410 # gcd(t, db//g) == gcd(nb*(da//g), db//g) == 1
415 # g2 = gcd(t, d) == gcd(t, (da//g)*(db//g)*g) == gcd(t, g)
419 # (da//g)*(db//g)*(g//g2) (da//g)*(db//g2)
432 # Let g1 = gcd(na, db) and g2 = gcd(nb, da), then
436 # da*db db*da (db//g1)*(da//g2)
444 # Indeed, pick (na//g1). It's coprime with (da//g2), because input
454 na, da = a.numerator, a.denominator
456 g = math.gcd(da, db)
458 return Fraction(na * db + da * nb, da * db, _normalize=False)
459 s = da // g
470 na, da = a.numerator, a.denominator
472 g = math.gcd(da, db)
474 return Fraction(na * db - da * nb, da * db, _normalize=False)
475 s = da // g
486 na, da = a.numerator, a.denominator
492 g2 = math.gcd(nb, da)
495 da //= g2
496 return Fraction(na * nb, db * da, _normalize=False)
503 na, da = a.numerator, a.denominator
509 g2 = math.gcd(db, da)
511 da //= g2
513 n, d = na * db, nb * da
528 da, db = a.denominator, b.denominator
529 div, n_mod = divmod(a.numerator * db, da * b.numerator)
530 return div, Fraction(n_mod, da * db)
536 da, db = a.denominator, b.denominator
537 return Fraction((a.numerator * db) % (b.numerator * da), da * db)