fix incorrect interpretation of given o/i ratio marginally > 1/6
parent
bb7972b72d
commit
71da011e7a
|
@ -426,12 +426,12 @@ static char const * rate_init(
|
||||||
postM = 1 + (arbM > 1 && preM), arbM /= postM;
|
postM = 1 + (arbM > 1 && preM), arbM /= postM;
|
||||||
preL = 1 + (!preM && arbM < 2) + (upsample && mode), arbM *= preL;
|
preL = 1 + (!preM && arbM < 2) + (upsample && mode), arbM *= preL;
|
||||||
if ((frac = arbM - (int)arbM)!=0)
|
if ((frac = arbM - (int)arbM)!=0)
|
||||||
epsilon = fabs((uint32_t)(frac * MULT32 + .5) / (frac * MULT32) - 1);
|
epsilon = fabs(floor(frac * MULT32 + .5) / (frac * MULT32) - 1);
|
||||||
for (i = 1, rational = frac==0; i <= maxL && !rational; ++i) {
|
for (i = 1, rational = frac==0; i <= maxL && !rational; ++i) {
|
||||||
d = frac * i, try = (int)(d + .5);
|
d = frac * i, try = (int)(d + .5);
|
||||||
if ((rational = fabs(try / d - 1) <= epsilon)) { /* No long doubles! */
|
if ((rational = fabs(try / d - 1) <= epsilon)) { /* No long doubles! */
|
||||||
if (try == i)
|
if (try == i)
|
||||||
arbM = ceil(arbM), shift += arbM > 2, arbM /= 1 + (arbM > 2);
|
arbM = ceil(arbM), shift += x = arbM > 3, arbM /= 1 + x;
|
||||||
else arbM = i * (int)arbM + try, arbL = i;
|
else arbM = i * (int)arbM + try, arbL = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue