Хитрые, необычные алгоритмы и код
Re: Хитрые, необычные алгоритмы и код
У кого-нибудь остался архив MULT_KNUTH.zip из сообщения https://radiokot.ru/forum/viewtopic.php ... 5&start=83 ?
- Реклама
- Starichok51
- Модератор
- Сообщения: 19046
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Хитрые, необычные алгоритмы и код
это "тупое" суммирование частичных произведений пишется элементарно за несколько минут, без всякого чужого архива.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Хитрые, необычные алгоритмы и код
А Карацубой не быстрее будет?
Re: Хитрые, необычные алгоритмы и код
Умножение 32*32 занимает 132 такта, что даст алгоритм Карацубы?

Спойлер
- Вложения
-
- KNUT_32.PNG
- (72.5 КБ) 566 скачиваний
- Реклама
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Хитрые, необычные алгоритмы и код
akl, если есть аппаратная операция умножения, то мало что. Если же ее нет, то - заметное ускорение.
-
culibin 100
- Встал на лапы
- Сообщения: 88
- Зарегистрирован: Ср апр 29, 2009 10:35:56
- Откуда: кр. лиман украина
Re: Хитрые, необычные алгоритмы и код
Здравствуйте уважаемые.Прошерстил форумы и думаю это самая подходящая ветка.Нужна помощь ибо у меня голова не варит уже.Итак задача опроса данных с оптической линейки и вывод на дисплей тм1638.Уже сделано:линейка опрашивается по прерыванию и данные выводятся на табло но! вместо одного миллиметра ,десятой , сотой отображается количество импульсов на тот самый миллиметр...один импульс это 5 микрон а одна сотка это 2 импульса по 5 микрон...пишу на си для тинки 88.Алгоритм с делилками на целочисленное значение не подходит.Может у когото есть мысли поделитесь .при необходимости кусок кода предоставлю.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Хитрые, необычные алгоритмы и код
Ничего не понял, но если один импульс это сколько-то микрон, то N импульсов в микроны переводятся умножением на N, а не делением...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
culibin 100
- Встал на лапы
- Сообщения: 88
- Зарегистрирован: Ср апр 29, 2009 10:35:56
- Откуда: кр. лиман украина
Re: Хитрые, необычные алгоритмы и код
переменные int sot_y,dec_y,edc_y,deced_y,soted_y;
переменные temp_y1- temp_y8 хранят результаты счета для вывода на табло
if (mic_y==2){temp_y8=0;mic_y=0;if(sot_y<10){sot_y++;temp_y7=sot_y;};}else {temp_y8=5;}; если один импульс то вывожу на экран 5 а когда приходит второй вывожу 0 и добавляю сотку
if (sot_y==10){sot_y=0;if(dec_y<10){dec_y++;temp_y6=dec_y;};}; тут если собралось десять соток до добавляю десятку вывод цифр соответственно обновляется при каждой смене.
if (dec_y==10){dec_y=0;if(edc_y<10){edc_y++;temp_y5=edc_y;};}; далее все повторяется для следующих разрядов
if (edc_y==10){edc_y=0;if(deced_y<10){deced_y++;temp_y5=deced_y;};};
if (deced_y==10){deced_y=0;if(soted_y<10){soted_y++;temp_y5=soted_y;};};
переменные temp_y1- temp_y8 хранят результаты счета для вывода на табло
if (mic_y==2){temp_y8=0;mic_y=0;if(sot_y<10){sot_y++;temp_y7=sot_y;};}else {temp_y8=5;}; если один импульс то вывожу на экран 5 а когда приходит второй вывожу 0 и добавляю сотку
if (sot_y==10){sot_y=0;if(dec_y<10){dec_y++;temp_y6=dec_y;};}; тут если собралось десять соток до добавляю десятку вывод цифр соответственно обновляется при каждой смене.
if (dec_y==10){dec_y=0;if(edc_y<10){edc_y++;temp_y5=edc_y;};}; далее все повторяется для следующих разрядов
if (edc_y==10){edc_y=0;if(deced_y<10){deced_y++;temp_y5=deced_y;};};
if (deced_y==10){deced_y=0;if(soted_y<10){soted_y++;temp_y5=soted_y;};};
Последний раз редактировалось culibin 100 Вт авг 24, 2021 21:22:33, всего редактировалось 1 раз.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Хитрые, необычные алгоритмы и код
Понятнее не стало
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
culibin 100
- Встал на лапы
- Сообщения: 88
- Зарегистрирован: Ср апр 29, 2009 10:35:56
- Откуда: кр. лиман украина
Re: Хитрые, необычные алгоритмы и код
if (VAL_Y==VAL_Ycl ) {mic_y++ ;} else {mic_y--;} обработчик прерывания
Добавлено after 1 minute 31 second:
[uquote="ARV",url="/forum/viewtopic.php?p=4080983#p4080983"]Понятнее не стало[/uquote]
что именно не понятно? как работает мой код ? я прибавляю по нарастающей по 5 микрон дважды для сотки и так к каждому разряду по единице до целого милиметра
Добавлено after 1 minute 31 second:
[uquote="ARV",url="/forum/viewtopic.php?p=4080983#p4080983"]Понятнее не стало[/uquote]
что именно не понятно? как работает мой код ? я прибавляю по нарастающей по 5 микрон дважды для сотки и так к каждому разряду по единице до целого милиметра
- Starichok51
- Модератор
- Сообщения: 19046
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Хитрые, необычные алгоритмы и код
это самая НЕ подходящая ветка.culibin 100 писал(а):думаю это самая подходящая ветка.
или ты считаешь, что предложил хитрый и необычный алгоритм, чтобы другие люди могли применить его у себя?
так ты сильно ошибаешься.
в этой теме люди показывают свои "хитрости", которые могут быть полезны другим людям.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
-
culibin 100
- Встал на лапы
- Сообщения: 88
- Зарегистрирован: Ср апр 29, 2009 10:35:56
- Откуда: кр. лиман украина
Re: Хитрые, необычные алгоритмы и код
я просил как раз подсказать мне реализовать алгоритм а не рекламирую свой.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Хитрые, необычные алгоритмы и код
я так и не понял, в чем проблема?
вместо простого счетчика импульсов вы применяете поразрядный (аналог BCD) счет. ну, не знаю, чем это оправдано, но вполне приемлемо.
и чо?
я бы делал иначе: считал импульсы в обычном счетчике, а уже перед выводом на индикатор производил бы вычисления и преобразования в "читабельный" вид. в прерываниях счет типа counter++, в главном цикле расчет и вывод.
никакой "необычности" или "оригинальности" в этом алгоритме нет и не нужно
вместо простого счетчика импульсов вы применяете поразрядный (аналог BCD) счет. ну, не знаю, чем это оправдано, но вполне приемлемо.
и чо?
я бы делал иначе: считал импульсы в обычном счетчике, а уже перед выводом на индикатор производил бы вычисления и преобразования в "читабельный" вид. в прерываниях счет типа counter++, в главном цикле расчет и вывод.
никакой "необычности" или "оригинальности" в этом алгоритме нет и не нужно
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
culibin 100
- Встал на лапы
- Сообщения: 88
- Зарегистрирован: Ср апр 29, 2009 10:35:56
- Откуда: кр. лиман украина
Re: Хитрые, необычные алгоритмы и код
if (VAL_Y==VAL_Ycl ) {mic_y++ ;} else {mic_y--;} вот я и делаю тут как написали типа counter++.читабельный вид портит что микроны должны прибавляться по 5 за импульс и отображаться также .в разряде отображается либо 5 либо 0 а сотки отображаются как и положено от 1 до 9.задача простенькая но чет я наверно старею...еще нудобство что нужно минимально загрузить ядро мк иначе прерывания начинают глотаться при увеличении скорости движения линейки энкодера.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Хитрые, необычные алгоритмы и код
МК по идее должен уметь считать внешние импульсы аппаратно... Может, это лучше, чем прерывание на каждый импульс?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Хитрые, необычные алгоритмы и код
[uquote="culibin 100",url="/forum/viewtopic.php?p=4081647#p4081647"]...читабельный вид портит что микроны должны прибавляться по 5 за импульс и отображаться также .в разряде отображается либо 5 либо 0 а сотки отображаются как и положено от 1 до 9.задача простенькая но чет я наверно старею...еще нудобство что нужно минимально загрузить ядро мк иначе прерывания начинают глотаться при увеличении скорости движения линейки энкодера.[/uquote]
Думаю, выражение 1000*S=5*N решит проблему. S[мм]-отсчет энкодерной линейки. 1000 учитывается десятичной точкой на табло.
Если счетчик с каждым импульсом изменяет свое состояние на 5, умножение не нужно. Для энкодера счетчик должен быть реверсивный. В прерывании определяется направление и меняется состояние счетчика.
Думаю, выражение 1000*S=5*N решит проблему. S[мм]-отсчет энкодерной линейки. 1000 учитывается десятичной точкой на табло.
Если счетчик с каждым импульсом изменяет свое состояние на 5, умножение не нужно. Для энкодера счетчик должен быть реверсивный. В прерывании определяется направление и меняется состояние счетчика.
-
culibin 100
- Встал на лапы
- Сообщения: 88
- Зарегистрирован: Ср апр 29, 2009 10:35:56
- Откуда: кр. лиман украина
Re: Хитрые, необычные алгоритмы и код
попробую разобраться.. точка при целых миллиметрах у меня отображается постоянно. и что в выражении 1000*S=5*N значит N?
Re: Хитрые, необычные алгоритмы и код
N это число импульсов энкодера.
N=199 S=0.995; N=200 S=1.000; N=201 S=1.005
N=199 S=0.995; N=200 S=1.000; N=201 S=1.005
-
culibin 100
- Встал на лапы
- Сообщения: 88
- Зарегистрирован: Ср апр 29, 2009 10:35:56
- Откуда: кр. лиман украина
Re: Хитрые, необычные алгоритмы и код
в чем разница S[мм]-отсчет энкодерной линейки. от N это число импульсов энкодера?мне же и нужно из импульсов сделать миллиметры соответственно из N получить S. из формулы понятно что
N (то что насчитало прерывание от линейки множим на 5 микрон за каждый импульс ) затем делим на 1000 и получаем реальное кол-во мм ( некое число DATA_Y) которое нужно отобразить на табло?
отображаю таким алгоритмом
temp_y1 =16;//INDEX_NEGATIVE_SIGN;
temp_y2 = DATA_Y/1000000%10;//Вывод цифры - "7"
temp_y3 = DATA_Y/100000%10; //Вывод цифры - "6"
temp_y4 = DATA_Y/10000%10; //Вывод цифры - "5"
temp_y5 = DATA_Y/1000%10;//Вывод цифры - "4"
temp_y6 = DATA_Y/100%10; //Вывод цифры - "3"
temp_y7 = DATA_Y/10%10; //Вывод цифры - "2"
temp_y8 = DATA_Y/1%10;//Вывод цифры - "1"
N (то что насчитало прерывание от линейки множим на 5 микрон за каждый импульс ) затем делим на 1000 и получаем реальное кол-во мм ( некое число DATA_Y) которое нужно отобразить на табло?
отображаю таким алгоритмом
temp_y1 =16;//INDEX_NEGATIVE_SIGN;
temp_y2 = DATA_Y/1000000%10;//Вывод цифры - "7"
temp_y3 = DATA_Y/100000%10; //Вывод цифры - "6"
temp_y4 = DATA_Y/10000%10; //Вывод цифры - "5"
temp_y5 = DATA_Y/1000%10;//Вывод цифры - "4"
temp_y6 = DATA_Y/100%10; //Вывод цифры - "3"
temp_y7 = DATA_Y/10%10; //Вывод цифры - "2"
temp_y8 = DATA_Y/1%10;//Вывод цифры - "1"


