int rational_div(struct rational* a, const struct rational* b, const struct rational* c) { rational_printf("rational_div"); struct rational d; return rational_inv(&d, c) && (rational_mult(a, b, &d), 1); }
void rational_mult(struct rational* a, const struct rational* b, const struct rational* c) { rational_printf("rational_mult"); a->p = (b->p)*(c->p); a->q = (b->q)*(c->q); rational_error = RATIONAL_SUCCESS; }
void rational_sub(struct rational* a, const struct rational* b, const struct rational* c) { struct rational d; rational_printf("rational_sub"); rational_neg(&d, c); rational_add(a, b, &d); }
void rational_neg(struct rational* a, const struct rational* b) { rational_printf("rational_neg"); a->p = - b->p; a->q = b->q; rational_error = RATIONAL_SUCCESS; }
int rational_inv(struct rational* a, const struct rational* b) { rational_printf("rational_inv"); if(b->q == 0) { rational_error = RATIONAL_DIVISION_BY_ZERO; } else { a->p = b->q; a->q = b->p; rational_error = RATIONAL_SUCCESS; } return (rational_error == RATIONAL_SUCCESS); }
int rational_print(const struct rational* a) { rational_printf("rational_print"); return printf("%d/%d", a->p, a->q); }