// // divide la frazione f1 per la frazione f2 // t_fraction fraction_div(t_fraction f1, t_fraction f2) { t_fraction f = fraction_create(f1.numerator * f2.denominator, f1.denominator * f2.numerator); fraction_reduce(&f); return f; }
// // crea una frazione da un double // t_fraction fraction_fromdouble(double d) { int num; int den; if(!fraction_isdecimal(d)) { num = (d > INT_MAX) ? INT_MAX : d; den = 1; } else { int max = 9; int m = 1; while(fraction_isdecimal(d) && max > 0) { --max; m *= 10; d = d * 10.0; } num = (d > INT_MAX) ? INT_MAX : d; den = m; } // crea la frazione t_fraction f = fraction_create(num, den); // riduce ai minimi termini fraction_reduce(&f); return f; };
struct fraction fraction_div(struct fraction a, struct fraction b) { struct fraction r; r.nume = a.nume*b.deno; r.deno = a.deno*b.nume; fraction_reduce(&r); return r; }
// // sottrae le frazioni f1 e f2 // t_fraction fraction_sub(t_fraction f1, t_fraction f2) { assert(f1.denominator != 0); assert(f2.denominator != 0); int lcm = fraction_lcm(f1.denominator, f2.denominator); int num = (f1.numerator * lcm / f1.denominator) - (f2.numerator * lcm / f2.denominator); t_fraction f = fraction_create(num, lcm); fraction_reduce(&f); return f; }