Числитель - drmModeModeInfo::clock * 1000
, поле clock
- в килогерцах, и нам нужна Гц для формулы.
Знаменатель - это произведение полей drmModeModeInfo::htotal
и drmModeModeInfo::vtotal
.
Для лучшего результата я упрощаю рациональное, деля числитель и знаменатель на их наибольший общий делитель. Для этой части я использовал алгоритм из Википедии .
Я не уверен, поддерживает ли дисплей текущие частоты сигналов выше 2 ^ 32 Гц = 4,29 ГГц, но даже если они этого не делают будущие могут сделать это, то есть лучше использовать 64-битное целочисленное вычисление.