Полная версия этой страницы:
Как бы сделать так же ?
Есть подпрограмма написанная давным давно и не мной.
На вход ей поступают два параметра START-END (к примеру 10-100, 100-1000, 500-5000 ...) эти параметры могут быть любыми целыми числами.
При каждом следующем вызове на выходе получаем промежуточное значение, тоже целое число которое больше предыдущего на некую величину (на картинке красная).
Можно ли на основании приведённых таблиц понять каким образом (по какой функции) вычисляется эта дельта.
Исходников нет. Дизассеблировать нет возможности.
Нужно написать что то своё что будет работать также, ну или очень похоже.
Пока только вижу что первое число равно примерно половине STARTа и дельта вдвое меньше него.
А дальше ...
AHTOXA
Nov 12 2012, 10:32
Может быть, это алгоритм Брезенхема?
arttab
Nov 13 2012, 01:34
муторно, но можно из прошивки выковырять.
приходилось ковырять прошивки из-за отсутствия исходников и документации на протоколы
Имя функции ничего не подсказывает?
Что будет если задать диапазон отличный от декадного как у вас? 1-2, 1-1000, 10-20 например
ILYAUL
Nov 13 2012, 04:06
Из таблицы как-то так видно , что если из 6-4=2 Из 9-6=3 из 11-9=2 ... из 423-396=27 ну и так далее....
Цитата(ILYAUL @ Nov 13 2012, 15:06)

Из таблицы как-то так видно , что если из 6-4=2 Из 9-6=3 из 11-9=2 ... из 423-396=27 ну и так далее....
Так автор именно так и вычислил красные цифры, если вы не поняли :>
Более интересен вопрос как функция выбирает первое значение и количество шагов до максимума.
ILYAUL
Nov 13 2012, 04:37
Цитата
если вы не поняли :>
Да не врубился, утро ....
Цитата
как функция выбирает первое значение и количество шагов до максимума
Цитата
ей поступают два параметра START-END.....
Очень похоже , что задается диапазон
Цитата
каждом следующем вызове на выходе получаем промежуточное значение... которое больше предыдущего....
Получается , что значения могут только расти. Может график по таблице нарисовать, у меня под рукой миллимитровки нет..
Цитата(ILYAUL @ Nov 13 2012, 15:37)

Получается , что значения могут только расти. Может график по таблице нарисовать, у меня под рукой миллимитровки нет..
ну да, растут, от начала диапазона до конца. Практически с постоянным приращением. Как тут заметили, смахивает на Брезенхэма. Гораздо любопытнее как определяется первая точка ИЛИ количество шагов. Почему чтобы пройти от 10 до 100 надо 34 шага, а от 500 до 5000 - 49?
А миллиметровку заменил Excel уже с конца прошлого века примерно ;>
ILYAUL
Nov 13 2012, 05:54
Цитата
ИЛИ количество шагов
так может оно и задаётся диапазоном т.е изначально известно
Цитата
А миллиметровку заменил Excel уже с конца прошлого века примерно ;>
Не люблю я его с детства
Додумывать - какой же там внутри алгоритм, есть дело неблагодарное. Два варианта - таки дизассемблировать, либо построить аппроксимацию.
Для аппроксимации стоит построить несколько графиков - число шагов от диапазона, число шагов от первого-последнего аргумента (если с последним аргументом более-менее ясно - это конец диапазона, то с первым непонятно - он не является началом диапазона), ну и собсетвнно графики значений.
PS и это не Брезенхем, во-первых рост нелинейный, во-вторых последняя дельта выбивается из ряда, Брезенхем такого себе не позволяет.
редактор
Nov 13 2012, 07:38
Цитата
последняя дельта выбивается из ряда
Это может быть из-за того, что бы не выйти за диапазон при очередном приращении.
Еще заметил что нету ни одной дельты с нулевым значением в последнем разряде. (после 29 может быть 28,31 но не 30; 99 - 101; 109 -111).
Видать хотят что бы младший разряд каждого следующего значения обязательно менялся.
По моему дельта с каждым шагом увеличивается на некую не целую константу и округляется до целого перед сложением.
Величина начального значения вполне может по таблице выбираться.
Параметр START может быть любым целым числом но в реальном изделии их не так уж и много.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.