- 
	
- Именно нужна предварительная проверка и коррекция для нечетных чисел. Я же в примере подробно расписал. Или нет? - Bill(17.01.2013 09:01)
			
- нет. Постпроверка логичнее и удобнее, особенно если деление выполняется не на 2, а на большую степень. Коррекцию достаточно выполнить один раз в конце, а в Вашем случае её нужно делать перед каждым сдвигом - koyodza(17.01.2013 11:52)
					
- Так вы возьмите несколько примеров и проверьте. И потом, что именно  Bill(164 знак., 17.01.2013 12:01 - 12:23, ссылка)
							
- сами проверьте. Тот бит, который уходит в перенос, если сдвигов более чем один то который последним. Если результат отрицательный, то просто прибавьте уходящий в перенос бит - koyodza(17.01.2013 12:10)
									
- Интересно, как это с одной посткоррекцией ADC поделить -5 на 8 и получить 0? - AD(17.01.2013 12:30)
											
- элементарно. Только выше я ошибся - не последний выдвинутый бит, а логическая сумма (обычно удобно использовать флаг Z) всех выдвинутых битов  koyodza(481 знак., 17.01.2013 13:29)
													
- кстати, вариант прибавления только последнего выдвинутого бита даёт арифметическое округление, что часто может оказаться даже удобнее  koyodza(2292 знак., 17.01.2013 17:43 - 18:21)
															
- В DSP 100 лет как применяется. Вам не удастся обойти С  AD(56 знак., 17.01.2013 17:59)
																	
- в DSP много чего применяется, речь не о них. Вы попробуйте свою конструкцию для 8-битника откомпилировать. Свой вариант деления на степень двойки с арифметическим округлением для AVR я показал ниже - koyodza(17.01.2013 18:14, ссылка)
																			
- Деление на 16  AD(472 знак., 17.01.2013 18:30)
																					
- а теперь то же самое, но для произвольной степени делителя - koyodza(18.01.2013 01:02)
 
 
 - Деление на 16  AD(472 знак., 17.01.2013 18:30)
																					
 
 - в DSP много чего применяется, речь не о них. Вы попробуйте свою конструкцию для 8-битника откомпилировать. Свой вариант деления на степень двойки с арифметическим округлением для AVR я показал ниже - koyodza(17.01.2013 18:14, ссылка)
																			
 
 - В DSP 100 лет как применяется. Вам не удастся обойти С  AD(56 знак., 17.01.2013 17:59)
																	
 - Вот именно, что с одной не получится. С предварительной коррекцией проще и быстрее  AD(145 знак., 17.01.2013 13:49)
															
- да не быстрее и не проще: предварительная коррекция по Bill`у нужна перед каждым сдвигом. И не нужно приводить сишных примеров, а то я просто напишу a=b/c и идите лесом. А логическое или всех выдвинутых битов - это просто проверка на 0, которая во  koyodza(38 знак., 17.01.2013 13:52 - 13:56)
																	
- Кто мешает добавить все единицы одним махом? Сложение - линейная операция. И неужели ассемблерный эквивалент этого кусочка не очевиден? - AD(17.01.2013 13:57)
																			
- насчёт "неужели ассемблерный эквивалент этого кусочка не очевиден" последний раз повторяю, идите лесом. Или забудьте про языки высокого уровня в этой ветке, или нам здесь нечего обсуждать - koyodza(17.01.2013 14:06)
 - в Вашем случае (при пред-коррекции) нужно наложить маску на исходное число, если там не 0, то прибавить константу, а не единицу (попробуйте поделить -5 на 8 своим методом), а это может оказаться сложнее, чем пользоваться сложением с флагом переноса - koyodza(17.01.2013 14:04)
																					
- Напишите проще  AD(653 знак., 17.01.2013 14:12)
																							
- а теперь попробуйте поделить на 128 :=) - koyodza(17.01.2013 14:25)
																									
- Какие-то проблемы? Повторяю, напишите проще или хотя бы так же  AD(585 знак., 17.01.2013 14:32 - 14:36)
																											
- попробую. Для деления с округлением к нулю отрицательного 16-разрядного числа на 2 на AVR получается всего 4 команды. Дополнил для чисел большей разрядности и арифметического округления к ближайшему целому   koyodza(1842 знак., 17.01.2013 17:28 - 18:11)
																													
- Забавно, получилось хуже, чем С (при делении на 4 и больше), и при этом неправильно.  AD(93 знак., 17.01.2013 17:57)
																															
- попробуйте сделать то же самое для чисел с большей разрядностью, а также для переменной степени делителя. Пример с делением на 128 видимо не очень удачен, т.к. сдвиги вправо здесь удобнее заменить на сдвиги влево. Я просто хотел показать koyodza(47 знак., 17.01.2013 18:06 - 18:12)
 - покажите где именно неправильно - koyodza(17.01.2013 17:57)
																																	
- ASR Rlow/ROR Rhigh, при этом ADIW Rlow - AD(17.01.2013 18:00)
																																			
- опечатка, спасибо. Конечно же ASR Rhigh затем ROR Rlow. Исправил - koyodza(17.01.2013 18:02)
 
 
 - ASR Rlow/ROR Rhigh, при этом ADIW Rlow - AD(17.01.2013 18:00)
																																			
 
 
 - Забавно, получилось хуже, чем С (при делении на 4 и больше), и при этом неправильно.  AD(93 знак., 17.01.2013 17:57)
																															
 
 - попробую. Для деления с округлением к нулю отрицательного 16-разрядного числа на 2 на AVR получается всего 4 команды. Дополнил для чисел большей разрядности и арифметического округления к ближайшему целому   koyodza(1842 знак., 17.01.2013 17:28 - 18:11)
																													
 
 - Какие-то проблемы? Повторяю, напишите проще или хотя бы так же  AD(585 знак., 17.01.2013 14:32 - 14:36)
																											
 
 - а теперь попробуйте поделить на 128 :=) - koyodza(17.01.2013 14:25)
																									
 
 - Напишите проще  AD(653 знак., 17.01.2013 14:12)
																							
 
 
 - Кто мешает добавить все единицы одним махом? Сложение - линейная операция. И неужели ассемблерный эквивалент этого кусочка не очевиден? - AD(17.01.2013 13:57)
																			
 
 - да не быстрее и не проще: предварительная коррекция по Bill`у нужна перед каждым сдвигом. И не нужно приводить сишных примеров, а то я просто напишу a=b/c и идите лесом. А логическое или всех выдвинутых битов - это просто проверка на 0, которая во  koyodza(38 знак., 17.01.2013 13:52 - 13:56)
																	
 
 - кстати, вариант прибавления только последнего выдвинутого бита даёт арифметическое округление, что часто может оказаться даже удобнее  koyodza(2292 знак., 17.01.2013 17:43 - 18:21)
															
 
 - элементарно. Только выше я ошибся - не последний выдвинутый бит, а логическая сумма (обычно удобно использовать флаг Z) всех выдвинутых битов  koyodza(481 знак., 17.01.2013 13:29)
													
 - Еще раз -> - Bill(17.01.2013 12:24, ссылка)
 
 - Интересно, как это с одной посткоррекцией ADC поделить -5 на 8 и получить 0? - AD(17.01.2013 12:30)
											
 
 - сами проверьте. Тот бит, который уходит в перенос, если сдвигов более чем один то который последним. Если результат отрицательный, то просто прибавьте уходящий в перенос бит - koyodza(17.01.2013 12:10)
									
 
 - Так вы возьмите несколько примеров и проверьте. И потом, что именно  Bill(164 знак., 17.01.2013 12:01 - 12:23, ссылка)
							
 
 - нет. Постпроверка логичнее и удобнее, особенно если деление выполняется не на 2, а на большую степень. Коррекцию достаточно выполнить один раз в конце, а в Вашем случае её нужно делать перед каждым сдвигом - koyodza(17.01.2013 11:52)
					
 - Ну-у-у, я с отрицательными числами еще не работал, так что мнение бывалых для меня ценно... - mazur(16.01.2013 23:53)
 
 - Именно нужна предварительная проверка и коррекция для нечетных чисел. Я же в примере подробно расписал. Или нет? - Bill(17.01.2013 09:01)