реклама на сайте
подробности

 
 
> unsigned long поделить на 10 и на 100, ну как нить совсем не стандартно...
singlskv
сообщение Apr 25 2011, 22:14
Сообщение #1


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Собственно сабжект
умножение на 429496730 и на 42949673 не предлагать,
не катит из-за нехватки регистров на нормальную реализацию... и память тю-тю...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ukpyr
сообщение Apr 26 2011, 14:28
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



желательно протестировать весь диапазон long int, мало ли что...

протестировал - ваш алгоритм дает кучу ошибок, начиная с 131080 (вместо 13108 получается 13107).
там после умножения на 0x3333 обязательно нужна коррекция - прибавить 0x3333

Сообщение отредактировал ukpyr - Apr 26 2011, 14:41
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 26 2011, 15:19
Сообщение #3


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(ukpyr @ Apr 26 2011, 18:28) *
желательно протестировать весь диапазон long int, мало ли что...

протестировал - ваш алгоритм дает кучу ошибок, начиная с 131080 (вместо 13108 получается 13107).
там после умножения на 0x3333 обязательно нужна коррекция - прибавить 0x3333

коррекция на 0x3333 уже есть в коде
но ошибки действительно есть т.к. после добавления остатка от деления старшей части
у нас диапазон становится 0 - 0x50000

сейчас будем допиливать...

Вроде так корректно:
Код
              DWORD N = ...; // делимое
              DWORD result;
              N >>= 1;
              result = (((N >> 16) + 1) * 0x3333) & 0xFFFF0000;
              N = N - result * 5 + 1;
              N += N >> 16; // коррекция для диапазона 0x10000 - 0x50000
              result |= (N  * 0x3333) >> 16;

Go to the top of the page
 
+Quote Post
=GM=
сообщение Apr 26 2011, 15:37
Сообщение #4


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Чёт не всё понимаю. Вроде бы поначалу борьба шла за малое количество используемых регистров. А сейчас за што бодаетесь?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- singlskv   unsigned long поделить на 10 и на 100   Apr 25 2011, 22:14
- - rezident   Циклическим вычитанием десятков и сотен. На всяки...   Apr 25 2011, 23:43
- - Tiro   Лучше через вычитания деление выполнять не последо...   Apr 26 2011, 05:31
- - _dem   BCD ?   Apr 26 2011, 05:55
- - hd44780   А на чем пишем? На С, на асме? Еще один способ, м...   Apr 26 2011, 06:55
|- - Палыч   Цитата(hd44780 @ Apr 26 2011, 10:55) Кове...   Apr 26 2011, 07:01
- - =GM=   Цитата(singlskv @ Apr 25 2011, 21:14) не ...   Apr 26 2011, 08:53
|- - singlskv   Цитата(=GM= @ Apr 26 2011, 12:53) Сколько...   Apr 26 2011, 11:14
|- - hd44780   Цитата(singlskv @ Apr 26 2011, 14:14) и е...   Apr 26 2011, 11:49
||- - singlskv   Цитата(hd44780 @ Apr 26 2011, 15:49) По-м...   Apr 26 2011, 19:31
|- - =GM=   Цитата(singlskv @ Apr 26 2011, 10:14) для...   Apr 26 2011, 12:18
- - ukpyr   хм, почешу-ка репу... n = n1 * 65536 + n2; // пре...   Apr 26 2011, 12:07
|- - singlskv   Цитата(ukpyr @ Apr 26 2011, 16:07) хм, по...   Apr 26 2011, 12:16
|- - singlskv   Цитата(ukpyr @ Apr 26 2011, 16:07) n = n1...   Apr 26 2011, 13:30
- - singlskv   да, теперь все четко, вот код теста на VC: Кодint ...   Apr 26 2011, 15:51
|- - rezident   Цитата(singlskv @ Apr 26 2011, 21:51) ест...   Apr 26 2011, 16:08
|- - singlskv   Цитата(rezident @ Apr 26 2011, 20:08) Два...   Apr 26 2011, 16:34
- - Tiro   Теперь чуть-чуть понятно. Вам сюда   Apr 26 2011, 23:10
- - singlskv   на 100 делить так: Код for (unsigned int i = ...   Apr 29 2011, 19:55


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st July 2025 - 18:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01403 секунд с 7
ELECTRONIX ©2004-2016