36 int64_t num, int64_t den, int64_t max)
39 int sign = (num < 0) ^ (den < 0);
43 num =
FFABS(num) / gcd;
44 den =
FFABS(den) / gcd;
46 if (num <= max && den <= max) {
52 uint64_t x = num / den;
53 int64_t next_den = num - den * x;
54 int64_t a2n = x * a1.num + a0.
num;
55 int64_t a2d = x * a1.den + a0.
den;
57 if (a2n > max || a2d > max) {
58 if (a1.num) x = (max - a0.
num) / a1.num;
59 if (a1.den) x =
FFMIN(x, (max - a0.
den) / a1.den);
61 if (den * (2 * x * a1.den + a0.
den) > num * a1.den)
73 *dst_num = sign ? -a1.num : a1.num;
83 b.
den * (int64_t) c.
den, INT_MAX);
96 b.
den * (int64_t) c.
den, INT_MAX);
108 #define LOG2 0.69314718055994530941723212145817656807550013436025
115 exponent =
FFMAX( (
int)(log(fabs(d) + 1e-20)/
LOG2), 0);
116 den = 1LL << (61 - exponent);
125 int64_t a = q1.
num * (int64_t)q2.
den + q2.
num * (int64_t)q1.
den;
126 int64_t
b = 2 * (int64_t)q1.
den * q2.
den;
139 int i, nearest_q_idx = 0;
140 for (i = 0; q_list[i].
den; i++)
141 if (
av_nearer_q(q, q_list[i], q_list[nearest_q_idx]) > 0)
144 return nearest_q_idx;