рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд╛рд░реНрдп рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрд╛рдпрд╛ рдерд╛ред рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдХрд╛рдлреА рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд┐рдХрд▓рд╛ред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдерд╛ред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЙрдкрдХрд░рдг (рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░) рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ 32-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдРрд╕реЗ рдЙрдкрдХрд░рдг рдкрд░ рдПрдХ рдЯрд╛рдЗрдорд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 32768 рдЯрд┐рдХ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдЯрд┐рдХреНрд╕реЗрд╕ рдХреЛ рд╕рдЯреАрдХрддрд╛ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд┐рдирд╛ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЕрдзрд┐рдорд╛рдирддрдГ рдЧреЛрд▓рд╛рдИ рдХреЗ рд╕рд╛рде)ред
рдиреЛрдЯ: рд▓реЗрдЦ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдЬрд╛рд╡рд╛ рдореЗрдВ рдмрдиреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рд╕рдордЭ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, "рд╣реЗрдб-рдСрди" рд╕рдорд╛рдзрд╛рди -
m = (ticks * 1000) / (2^15)
рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдпреВрд░реЗрдХрд╛?
рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдиреЗ рдЬрд┐рд╕ рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА рд╡рд╣ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд░реВрдк рд╕реЗ 32 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдПрдХ рдмрдбрд╝реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред
рдПрдХ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдХреЛ рдЧреБрдгрд╛ рдХреЗ рд╕рд╛рде "рд╕реНрдорд╛рд░реНрдЯ" рд╡рд┐рднрд╛рдЬрди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛, рдХрдИ рдЪрд░рдгреЛрдВ рдореЗрдВ рдЪреЗрдХ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд░ 32 рдмрд┐рдЯреНрд╕ рдХреЛ рдУрд╡рд░рдлреНрд▓реЛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред
рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд, рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдИ (рдЙрд╕
1000 = 1024 - 24
рдпрд╛рдж рдХрд░рддреЗ рд╣реБрдП):
ticks * 1000 * 2^(-15) =
ticks * 2^(-5) - ticks * 24 * 2^(-15) = ticks * 2^(-5) - 3 * ticks * 2^(-12)
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрд▓:
private int getMillis(int ticks) { return (ticks >> 5) - 3*(ticks >> 12); }
рд╕реБрдкрд░! рдмрд╣реБрдд рдмреБрд░рд╛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдкрд╣рд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдБрдЪ рдХреА рдЧрдИ - рддрд░реНрдХ рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВред рдореИрдВрдиреЗ рдХрдИ рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдЬрд╛рдБрдЪ рдХреА - рдРрд╕рд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдорд╛рдирддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, + -3 рджреНрд╡рд╛рд░рд╛ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рд╕реЗ рд╡рд┐рдЪрд▓рди рд╣реЛрддреЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЧрдгрд┐рдд рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ (рдЕрдиреНрдпрдерд╛ рдЙрддреНрддрд░ рд╕рддреНрдп рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реЛрддреЗ), рд▓реЗрдХрд┐рди рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ, рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдмрд┐рдЯ рд╢рд┐рдлреНрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред N рд╕реЗ рджрд╛рдИрдВ рдУрд░ рдПрдХ рдмрд┐рдЯ рд╢рд┐рдлреНрдЯ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди n рдХреА рд╢рдХреНрддрд┐ рд╕реЗ 2 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдСрдкрд░реЗрд╢рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд┐рдЯреНрд╕ рдЬреЛ рдХрд┐ рд╢реВрдиреНрдп рдмрд┐рдЯ рдХреЗ "рджрд╛рдИрдВ рдУрд░" рд╣реИрдВ, рдХреЛ рдмрд╕ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 2 рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрд╢рди рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЧреБрдгрди рдФрд░ рдЕрдВрддрд░ред рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ, рдпрд╣ рдСрдкрд░реЗрд╢рди рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рддреНрд░реБрдЯрд┐ рдЙрди рдмрд┐рдЯреНрд╕ рдореЗрдВ рдареАрдХ рд╕реЗ рдЬрдорд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рд╢реВрдиреНрдп рдмрд┐рдЯ рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╣реИрдВред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореБрдЭреЗ рдкрд┐рдЫрд▓реЗ рдЦрд╛рд░рд┐рдЬ (рдорд╛рдЗрдирд╕-рдлрд░реНрд╕реНрдЯ) рдмрд┐рдЯ рдХрд╛ рд╕рдВрджреЗрд╣ рдерд╛, рд╢рд╛рдпрдж рдпрд╣ рд╡рд╣ рдерд╛ рдЬреЛ рдЧреБрдгрд╛ рдФрд░ рдЕрдВрддрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдЧрд╛рдпрдм рдерд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ:
private int getMillis(int ticks) { int err = ((ticks & 16) >> 4) - 3 * ((ticks & 2048) >> 11); if (err < 0) { return (ticks >> 5) - 3 * (ticks >> 12) - (Math.abs(err) >> 1); } else { return (ticks >> 5) - 3 * (ticks >> 12) + (err >> 1); } }
рдЧрд▓рдд рдЪрд░ рдореЗрдВ рд╣рдордиреЗ рдЙрд╕ рдмрд┐рдЯ рдХреЛ рдбрд╛рд▓ рджрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдлреЙрд░реНрдо
x - 3 * y
рдПрдХ рд╣реА рдСрдкрд░реЗрд╢рди рдЙрд╕ рдкрд░ рдЕрд▓рдЧ
x - 3 * y
рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 4 рд╡реЗрдВ рдФрд░ 11 рд╡реЗрдВ рдмрд┐рдЯреНрд╕ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╢реВрдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдСрдкрд░реЗрд╢рди рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдлрд┐рд░ рд╕реЗ 1 рдмрд┐рдЯ рджреНрд╡рд╛рд░рд╛ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирддреАрдЬрддрди, рдкрд╛рд░реА рдХреЗ рдмрд╛рдж рдЬреЛ рдХреБрдЫ рднреА рд░рд╣рддрд╛ рд╣реИ рд╡рд╣ рдЦреЛрдП рд╣реБрдП рдмрд┐рдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИ: рдЕрдм рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ 2 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдереАред
рдирд┐рд░реНрдгрдп
рдЕрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд╡рд┐рдЪрд╛рд░ рдХреА рджрд┐рд╢рд╛ рд╕рд╣реА рдереА, рд▓реЗрдХрд┐рди рджрд╢рдорд▓рд╡ рдмрд┐рдВрджреБ рдХреЗ рджрд╛рдИрдВ рдУрд░ рди рдХреЗрд╡рд▓ рдПрдХ рдмрд┐рдЯ рдХреЛ рднрд╛рдЧ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рд╕рднреА 5 рдЗрдВрдЯрд░рд╕реЗрдХреНрдЯрд┐рдВрдЧ рд╡рд╛рд▓реЗ (рдЬреЛ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдЖрд░реЗрдЦ рдореЗрдВ -1 рд╕реЗ -5 рддрдХ рдХреЗ рдкрджреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ)ред
рдирддреАрдЬрддрди, рдореБрдЭреЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓рд╛, рдЬрд┐рд╕рдХреА рддреНрд░реБрдЯрд┐ 0.5 рд╕реЗ рдХрдо рдереАред
рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рдерд╛, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрдВрдб рд╕реЗ 1 рдмрд┐рдЯ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди 5 рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рддреНрд░реБрдЯрд┐ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреЛрд▓рд╛рдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдХрд┐
i- th рдмрд┐рдЯ
i + 1- рд╡реЗрдВ рдмрд┐рдЯ рдХреЗ рдЖрдзреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред
рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдХреЛрдб рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП :)
private int getMillis(int ticks) { int l = (ticks & 0x1F) << 7; int r = ticks & 0xFFF;
рдЕрдЪреНрдЫреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмрдиреЗрдВ рдФрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рд░рдЦреЗрдВ!