fix incorrect interpretation of given o/i ratio marginally > 1/6

master
Rob Sykes 2016-05-06 21:52:52 +01:00
parent bb7972b72d
commit 71da011e7a
1 changed files with 2 additions and 2 deletions

View File

@ -426,12 +426,12 @@ static char const * rate_init(
postM = 1 + (arbM > 1 && preM), arbM /= postM;
preL = 1 + (!preM && arbM < 2) + (upsample && mode), arbM *= preL;
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) {
d = frac * i, try = (int)(d + .5);
if ((rational = fabs(try / d - 1) <= epsilon)) { /* No long doubles! */
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;
}
}