Создайте пользовательский тип для этого:
typedef struct {
int numerator;
unsigned int denominator;
} my_fract;
Вы можете иметь разные размеры для числителя и знаменателя в зависимости от вашего варианта использования.
С этим вы можете добавить конструкторы, которые принимают числитель и знаменатель, или плавающие или удваивается. И, возможно, преобразователи в выходные числа с плавающей запятой и снова удваиваются, потому что в этом типе нет «естественной» арифметики, и если бы вы захотели ее, вам пришлось бы сделать это самостоятельно.
my_fract make_fract(int numerator, unsigned int denominator)
{
my_fract res;
res.numerator = numerator;
res.denominator = denominator;
}
double fract_to_double(my_fract foo)
{
return (double)foo.numerator / (double)foo.denominator
}
и т. Д.