Представьте, что у вас есть две дроби p/q
и r/s
, которые вы хотите добавить к новой дроби a/b
. Что делает каждая строка?
// a = (p * s) + (q * r)
numerator = numerator * f.denominator + denominator * f.numerator;
// b = (r * s)
denominator = denominator *f.denominator;
Вместе у вас есть:
a p * s + q * r
--- = -------------
b r * s
Это традиционный способ сложения двух дробей с произвольными разными знаменателями. Вот пример - скажем, вы хотели добавить 3/5 и 2/9:
a 3 * 9 + 2 * 5 27 + 10 37
--- = ------------- = ------- = --
b 5 * 9 45 45
Проверяя, мы видим, что это действительно правильно .