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;
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
113 if (fabs(d) > INT_MAX + 3LL)
115 exponent =
FFMAX( (
int)(log(fabs(d) + 1e-20)/
LOG2), 0);
116 den = 1LL << (61 - exponent);
119 if ((!a.
num || !a.
den) && d && max>0 && max<INT_MAX)
128 int64_t
a = q1.
num * (int64_t)q2.
den + q2.
num * (int64_t)q1.
den;
129 int64_t
b = 2 * (int64_t)q1.
den * q2.
den;
142 int i, nearest_q_idx = 0;
143 for (i = 0; q_list[i].
den; i++)
144 if (
av_nearer_q(q, q_list[i], q_list[nearest_q_idx]) > 0)
147 return nearest_q_idx;
162 else if (d < 0) d = -1;
163 else if (d != d) d = INT_MIN;
186 for (start = 0; start < 10 ; start++) {
190 for (i = 0; i<100; i++) {
193 if (
FFABS(acc - exact) > 2) {