"Понты. .. Скучно... Надеялся, что выводы сможешь сделать сам."
т.е. ты – в контексте самоуверенной снисходительности? Посмотрим, насколько оправдано :)
Смотри, SergT, ты спрашивал: "Один вопрос. Найденная ошибка была здесь "t2%(maximum)" ?"
практика показала, что нет, не в этом, а потом ты попытался теоретизировать и я вижу насколько ты не прав, буквально по всем пунктам, сейчас покажу почему.
1. Ты даже прикинул процент ошибки в случае INT: "Диапазон ограничивается хоть и не именно таким образом, но все равно ограничивается, т.к. все компьютерные числа представляют собой счетные множества. В реале к примеру unsigned int16 0...65535. Делим на 3. получаем вероятности в виде простых дробей: 21846/65536; 21845/655366; 21845/65536. отклонение от 1/3 порядка 0,003%.". т.е. даже в случае использования такого короткого числа ошибка получается практически не уловимой. На деле же используются несоразмерно большие числа. Так что ты мог и не задавать свой вопрос, а просто сам прикинуть :)
2. Но, как я уже говорил, твой хоть "гипертрофированный" пример, хоть какой – не корректен и вот почему. Возьмем последовательность 0 1 2 3 4 2 и вот результат деления на 3: 0 1 2 0 1 2. Получается, что исходная последовательность далеко не так идеальна, как получившаяся, т.е. как бы неидеальность зависит вовсе не от операции, а от того, как ограничить интервал.
3. Но и этот вывод был бы неверен. Потому, что сравнивать числовые последовательности и статистические выборки нельзя просто прикидывая проценты, а необходимо для данной длины выборки прикидывать дисперсию и тогда для таких коротких выборок ожидаемые границы идеальности окажутся шире, чем приводимые результаты в процентах. Ведь иначе бы мы выборку 0 1 1 1 1 1 1 1 1 1 1 могли бы оценить как неидеальную, хотя она – лишь вполне реальная последовательность равномерного распределения, которая часто встречается в больших выборках. И для столь короткого примера она вполне укладывается в границы дисперсии.
Вот почему не только твой гипертрофированный пример, но и вообще рассуждения некорректны...
И, как я уже говорил, теперь я совершенно спокоен насчет правильности использования операции деления с остатком, что и является главным для алгоритма :)
Далее.
Если посмотреть две числовые последовательности, а не статистические выборки (первая - переполняющийся в цикле счетчик, вторая - более короткий инревал выборки), то мы сможем увидеть то самое биение, которое ты в упор замечать не желаешь :) и от которого необходимо избавляться при использовании значений счетчика, разбивая эти биения неодинаковостью выборки:
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567..
0123456701234567012345670123456701234567012345670123456701234567012345670123456701234567..
я выделил только один такой период, но их – два: две боковые частоты, получающиеся в результате модуляции – перемножения (операция деления соответствует операции умножения по сути). При перемножении двух частот всегда образуются две боковые частоты, равные сумма и разности этих частот. На практике, в радиотехнике используют передачу на одной боковой для значительного выигрыша в мощности. Твоя реплика: "Про биения вопрос скорее терминологический, когда говорят о радиоприеме обычно использут термин модуляция, её разницу с биениями можно показать. Скучно." - проявление дилетантства в этой области. Ну, а мой 15-летний опыт разработчика сложной электронной аппаратуры дает возможность просекать такие вещи налету.
"Понты. За флуктуации кварца волноваться не приходится поскольку здесь речь идет о чисто цифровых системах."
Ты хочешь сказать, что нестабильность опорной частоты не будут давать нестабильности числа тиков в выделенном интервале времени? :) Опять какое-то дилетанство.
"Предположение, что под обычной Windows можно делать нечто строго периодично(хотя бы в тиках, если не во времени), неверное."
где это я делал такое предположение? :) невнимательно воспринимаешь написанное...
"И если между простой реализацией и навороченой не будет разницы, зачем делать сложнее? Причем именно из-за сложности есть вероятность, что что-то будет работать не так как задумывалось. Подтвердилось на практике ))"
откуда взялось утверждение, что между простой реализацией и навороченой не будет разницы?
Притом, как ты скрупулезно отстаивал 0,003% :) Разница есть, и разница практическая. Сделал так потому, что на старых, медленных копмах это было достаточно существенно. Причем НИКАКИХ ухудшений идеальности распределения это в принципе дать не могло.
"Все что сказано мною в этой теме могу обосновать и пояснить"
да, пожалуйста, если тебе есть что сказать обоснованно, то самое время это сделать :) В любом случае - спасибо за обсуждение потому как оно укрепило мою уверенность :) А так как уверенность в правильности ошибочных решений растет со сложностью задачи, то важно не то, кто как ошибался, а общеконечный результат.
17.09.2008г. 14:46:19