Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Как правильно сделать деление? (+)
Отправлено
SM
04 февраля 2008 г. 11:54
при делении двух чисел, когда хотя бы одно со знаком и отрицательное, частное тоже получится отрицательным. Это ясно. А остаток? С ним как надо? (вопрос не по С, а по реализации команды деления.)
Составить ответ
|
Вернуться на конференцию
Ответы
А я вот пока склоняюсь к тому, что знак остатка должен быть равен знаку делимого. С целью безболезненного продолжения получения дробных разрядов из остатка.
—
SM
(04.02.2008 19:11:37
80.92.255.53
,
пустое
)
У Вас деление уже с усечением к нулю? Тогда да.
—
Oldring
(04.02.2008 19:51:47
91.76.17.177
, 180 байт)
Я ввожу (+)
—
SM
(04.02.2008 20:03:0
80.92.255.53
, 580 байт)
Не совсем понял как предполагается реализовать "дробное деление".
—
Oldring
(04.02.2008 20:14:58
91.76.17.177
, 121 байт)
Все-таки наверное многошаговое деление реализовать проще если округлять вниз
—
Oldring
(04.02.2008 20:25:45
91.76.17.177
, 276 байт)
Вот-вот, я про то же, что при многошаговом делении (+)
—
SM
(04.02.2008 20:42:11
80.92.255.53
, 380 байт)
Ну тогда уж abstc/negtc и беззнаковое деление :)
—
Oldring
(04.02.2008 21:19:11
91.76.17.177
,
пустое
)
не - abs внутрь делителя. Чтобы в режиме !fractional делитель делал все сам
—
SM
(04.02.2008 21:23:9
80.92.255.53
,
пустое
)
Тогда не промахнитесь с числом ксоров знаков ;)
—
Oldring
(04.02.2008 21:43:8
91.76.17.177
, 84 байт)
А как реализуется дробное деление - да очень просто, небольшое лишнее мультиплексирование... Отличающее его от целочисленного.
—
SM
(04.02.2008 20:43:34
80.92.255.53
,
пустое
)
ИМХО сделайте так же как в x86
—
Незнамо кто
(04.02.2008 15:44:21
74.86.17.82
, 846 байт)
Кстати, по поводу полезных DSP операций
—
Oldring
(04.02.2008 14:28:43
91.76.17.177
, 114 байт)
А можно сделать, чтобы все контроллеры были с уникальными идентификаторами? Тоже пригодилось бы.
—
AlexD
(04.02.2008 13:37:19
193.200.21.5
,
пустое
)
Ага. С уникальным направлением усечения при делении для каждой пары целых чисел. ;)
—
Oldring
(04.02.2008 13:46:58
91.76.17.177
,
пустое
)
:-)))
—
AlexD
(04.02.2008 13:49:57
193.200.21.5
,
пустое
)
нет
—
SM
(04.02.2008 13:46:21
80.92.255.53
,
пустое
)
Смотря куда округляется частное.
—
vitalyn
(04.02.2008 13:37:8
195.140.182.162
, 138 байт)
+1 Причём возможны 4 вида команд - округлять всегда в большую сторону, в меньшую, в сторону ноля, в сторону ОТ ноля. А ещё в случайную сторону :-)
—
AlexD
(04.02.2008 13:40:9
193.200.21.5
,
пустое
)
А также остатки совместимые с делением и противоположные ему :)
—
Oldring
(04.02.2008 13:41:5
91.76.17.177
,
пустое
)
а я придумал ещё одну команду - загрузить случайное число в аккумулятор. Число должно быть ФИЗИЧЕСКИ случайным.
—
AlexD
(04.02.2008 13:35:16
193.200.21.5
,
пустое
)
Как вариант - генерация единственного случайного числа во время сброса. Может удастся задействовать уже существующие аналаговые компоненты.
—
AlexD
(04.02.2008 18:20:30
212.220.82.152
,
пустое
)
Проще туда резистор загрузить:-)
—
-=ВН=-
(04.02.2008 15:02:54
193.125.71.140
,
пустое
)
Да. Я сейчас за это $0.4 плачу. Генерация MAC и уникального номера. А уникальный номер можешь?
—
=General=
(04.02.2008 14:42:48
81.23.109.150
,
пустое
)
Что ставишь?
—
AlexD
(04.02.2008 18:17:28
212.220.82.152
,
пустое
)
И где мне его взять? Аналоговый генератор шума сваять?
—
SM
(04.02.2008 13:42:35
80.92.255.53
,
пустое
)
ИДЕЯ!!!
—
vitalyn
(04.02.2008 13:53:40
195.140.182.162
, 545 байт)
да не буду я делать шумящий элемент, места мало.
—
SM
(04.02.2008 13:55:4
80.92.255.53
,
пустое
)
Ну хотя бы зарезервируй возможность подключения внешнего источника для этой цели!
—
vitalyn
(04.02.2008 14:22:33
195.140.182.162
, 146 байт)
Не смогут.
—
Oldring
(04.02.2008 14:24:55
91.76.17.177
,
пустое
)
Где-то был описан метод получения немного случайных битиков в FPGA с целенаправленным использованием метастабильности.
—
Oldring
(04.02.2008 13:50:30
91.76.17.177
, 82 байт)
Некошерно.
—
vitalyn
(04.02.2008 14:17:17
195.140.182.162
, 315 байт)
Метастабильность - это именно физическое событие. В отличие от прерываний.
—
Oldring
(04.02.2008 14:27:14
91.76.17.177
,
пустое
)
Ну да, откуда же ищё.
—
AlexD
(04.02.2008 13:48:26
193.200.21.5
,
пустое
)
Мало.
—
vitalyn
(04.02.2008 13:48:17
195.140.182.162
, 235 байт)
Истинно Случайное Число может служить уже основой для любого ГСЧ. Но в большинстве применений это будет уже излишне.
—
AlexD
(04.02.2008 13:52:8
193.200.21.5
,
пустое
)
этим я нарушу или гауссовость распределения, или белость спектра :)
—
SM
(04.02.2008 13:49:28
80.92.255.53
,
пустое
)
Нет, этим только уменьшите производительность генератора.
—
Oldring
(04.02.2008 13:53:44
91.76.17.177
,
пустое
)
Довольно сложно сделать
—
vitalyn
(04.02.2008 13:42:30
195.140.182.162
, 530 байт)
Это проблемы SM, моё дело предложить :-)
—
AlexD
(04.02.2008 13:48:54
193.200.21.5
,
пустое
)
Да ничего особо сложного в получении около-белого окологауссового шума нет. Площадь только не маленькая.
—
SM
(04.02.2008 13:46:1
80.92.255.53
,
пустое
)
Гауссовый шум и случайная двоичная последовательность - "это две большие разницы"
—
vitalyn
(04.02.2008 14:05:13
195.140.182.162
, 753 байт)
С практической точки зрения лучше иметь положительный остаток. А так - вопрос скорее терминологический и казуистический, нежели математический
—
=AVR=
(04.02.2008 13:31:34
80.92.96.19
,
пустое
)
В документации на матлаб это вопрос хорошо освещен
—
Fat Robot
(04.02.2008 13:17:12
62.105.138.5
, 110 байт)
Математически остаток всегда положителен (+):
—
argus98
(04.02.2008 12:46:59
81.22.205.230
, 508 байт)
"Математически остаток всегда положителен" - а верно ли это? Определение остатка в студию.
—
Каа
(04.02.2008 13:05:58
213.132.80.164
,
пустое
)
верно, как и то, что дробная часть числа всегда положительна
—
argus98
(04.02.2008 13:16:44
81.22.205.230
,
пустое
)
Извиняюсь, остаток должен иметь знак делителя, т.к. дробная часть числа всегда положительна.
—
argus98
(04.02.2008 13:56:59
81.22.205.230
,
пустое
)
Действительно (+)
—
Каа
(04.02.2008 14:32:3
213.132.80.164
, 250 байт)
Вообще, похоже что так, если верить Википедии:
—
Каа
(04.02.2008 13:08:49
213.132.80.164
,
пустое
,
ссылка
)
Вы подразумеваете дробную часть числа.
—
Oldring
(04.02.2008 13:24:0
91.76.17.177
,
пустое
)
Для реализации конечно проще чтобы остаток имел знак делителя. Но (+)
—
Oldring
(04.02.2008 12:42:19
91.76.17.177
, 214 байт)
:) :) Проще для реализации - чтобы остаток был всегда положителен, как от деления модулей.
—
SM
(04.02.2008 12:45:29
80.92.255.53
,
пустое
)
Ну Вам виднее как будет в Вашем процессоре. Просто я подразумевал что x == x / y * y + x % y :))
—
Oldring
(04.02.2008 12:48:32
91.76.17.177
,
пустое
)
То есть для реализации проще округлять x / y в сторону нуля. Но это неправильно.
—
Oldring
(04.02.2008 12:44:13
91.76.17.177
,
пустое
)
провести эксперимет и распечатать -a%b ?
—
++
(04.02.2008 12:23:11
212.45.31.226
,
пустое
)
Повторю для невнимательных. Вопрос не по С, а вопрос по реализации команды деления. Вопрос - не как в ANSI прописано, а как наиболее удобно.
—
SM
(04.02.2008 12:24:12
80.92.255.53
,
пустое
)
вопросы надо правильно формулировать, тогда не придется каждому объяснять
—
Имперская Политика
(04.02.2008 12:30:44
208.73.49.114
, 185 байт)
Заценить задачу, где нужен остаток и таво...посмотреть. Или команду сделать, чтоб так и так. Мне деление всего раза три в жизни понадобилось. ;О)
—
-mse-
(04.02.2008 12:20:6
83.239.86.98
,
пустое
)
Дык мне всего пару раз деление со знаком нужно было. (в Левинсоне-Дурбине и в спектральном анализе через собственные вектора и числа), и ни в одном из этих случаев не нужен был остаток. Отсюда и вопрос - ну не знаю я.
—
SM
(04.02.2008 12:29:20
80.92.255.53
,
пустое
)
;О) дык, и все так
—
-mse-
(04.02.2008 12:43:11
83.239.86.98
,
пустое
)
Как-то так получается, что отрицательные числа с фикс. запятой имеют представление: -|модуль целой части|+беззнаковая (положительная) дробная часть:-)
—
-=ВН=-
(04.02.2008 12:11:49
193.125.71.140
,
пустое
)
в доп коде:-)
—
-=ВН=-
(04.02.2008 12:12:56
193.125.71.140
,
пустое
)
А причем тут это? Вопрос про то, как представить остаток - как от деления модулей чисел, или со знаком частного.
—
SM
(04.02.2008 12:15:51
80.92.255.53
,
пустое
)
Да сам удивляюсь, причем тут это:-) Может при том, что со знаком делителя удобнее:-)
—
-=ВН=-
(04.02.2008 12:31:20
193.125.71.140
,
пустое
)
В общем на сейчас были варианты (+)
—
SM
(04.02.2008 12:39:17
80.92.255.53
, 207 байт)
:-) На вариант2 взгляните повнимательнее
—
-=ВН=-
(04.02.2008 14:45:8
193.125.71.140
, 555 байт)
Ответ: 2)a>0,b<0; тады ceil(|a/b|)*b вещь сугубо отряжительная и ее модуль больше-равен модуля a, откуда следует, что rem<0
—
-=ВН=-
(04.02.2008 14:47:32
193.125.71.140
,
пустое
)
Извиняюсь, 3 тоже верно. Но только одновременно с 1.
—
Oldring
(04.02.2008 13:27:42
91.76.17.177
,
пустое
)
Все кроме 1 несовместимо даже с древними стандартами С. Поэтому недопустимо.
—
Oldring
(04.02.2008 12:47:9
91.76.17.177
,
пустое
)
Ну 2) тоже не я придумал. Это вообще-то "modulus" согласно стандарту VHDL.
—
SM
(04.02.2008 12:52:3
80.92.255.53
,
пустое
)
Вы для своего проца будете код на VHDL писать?
—
Oldring
(04.02.2008 12:55:32
91.76.17.177
, 102 байт)
Код уже написан, и вопрос, как сделать УДОБНЕЕ для программиста-ассемблерщика, а не как в анси или иеее (для С можно написать и ф-цию _div, которая как надо все преобразует)
—
SM
(04.02.2008 12:59:13
80.92.255.53
,
пустое
)
IMHO для ассемблерщика по фиг - на фига ему деление вообще?
—
Oldring
(04.02.2008 13:03:7
91.76.17.177
, 228 байт)
Гы :) А что, делить бывает нужно только в C? Остаток нужен например, чтобы продолжить операцию деления для получения дробной части числа...
—
SM
(04.02.2008 13:05:2
80.92.255.53
,
пустое
)
Зачем ассемблерщику арифметика повышеной точности?
—
Oldring
(04.02.2008 13:06:43
91.76.17.177
,
пустое
)
Как зачем? DSP-задачи решаются в 95% случаев на ассемблере, и там очень часто арифметика повышенной точности.
—
SM
(04.02.2008 13:28:3
80.92.255.53
,
пустое
)
Ерунду говорите. Точность определяется задачей, а не используемым языком. И поверьте - ассемблерщики используют и деление, и повышенную точность... даже повыше, чем в ЯВУ, когда необходимо.
—
argus98
(04.02.2008 13:14:12
81.22.205.230
,
пустое
)
Вы недостаточно вдумчиво прочитали мой пост.
—
Oldring
(04.02.2008 13:20:6
91.76.17.177
, 186 байт)
Я ни разу не говорю о простоте реализации в железе! Даже наоборот, насрать мне на этот аспект. ПОВТОРЮ ВОПРОС. Какой вид должен иметь остаток, чтобы в наиболее частых задачах он был УДОБНЕЕ при условии программирования на ассемблере.
—
SM
(04.02.2008 13:29:48
80.92.255.53
,
пустое
)
Тогда поясните, какая разница на чем программировать?
—
Oldring
(04.02.2008 13:32:18
91.76.17.177
,
пустое
)
У SMа не будет компилятора. ;О) Никогда, ИМХО.
—
-mse-
(04.02.2008 13:37:37
83.239.86.98
,
пустое
)
Тогда зачем он спрашивает что удобно другим? Свои потребности он знает лучше IMHO ;)
—
Oldring
(04.02.2008 13:39:49
91.76.17.177
,
пустое
)
Затем, что мне нужна эта информация.
—
SM
(04.02.2008 13:52:32
80.92.255.53
,
пустое
)
А еще точнее, затем, что реализовать ф-цию для C согласно стандарту можно всегда и без проблем, и этот вопрос никак не связан с ассемблерной командой деления, суть которой быть удобной для большиства ассемблерных применений.
—
SM
(04.02.2008 13:54:15
80.92.255.53
,
пустое
)
Но ведь речь иден не только про "стандарт С".
—
Oldring
(04.02.2008 14:12:44
91.76.17.177
, 498 байт)
А кто говорит о железе? Мне вот по жизни в асме нужны целочисленные плюс, минус, умножить и деление в плавучке 32/32 (при любой разрядности процессора). Целочисленное деление ни разу не пригодилось.
—
argus98
(04.02.2008 13:27:25
81.22.205.230
,
пустое
)
:) А мне плавучка всего один раз в жизни пригодилась. И то, только когда делал прототип, для срочности взял кит на проце плавучем.
—
SM
(04.02.2008 13:31:52
80.92.255.53
,
пустое
)
имеется ввиду, что входные числа целые, а результат в плавучке (+):
—
argus98
(04.02.2008 13:40:30
81.22.205.230
, 254 байт)
Вы плавучку сами писали? Вопрос риторический.
—
Oldring
(04.02.2008 13:29:51
91.76.17.177
,
пустое
)
Когда то писал, потом выкинул за ненадобностью. Обхожусь нормализацией/денормализацией когда необходимо.
—
argus98
(04.02.2008 13:48:23
81.22.205.230
,
пустое
)
И что, писали плавающее деление без использования целочисленного? ;)
—
Oldring
(04.02.2008 13:51:53
91.76.17.177
,
пустое
)
Есть весьма интересные альгоритхмы деления. ;О) Когда из 24р делителя и 24р делимого получается 24р результат.
—
-mse-
(04.02.2008 14:00:47
83.239.86.98
,
пустое
)
Вы имеете в виду алгоритмы целочисленного деления с дописыванием требуемого количества нулей к делимому справа? ;)
—
Oldring
(04.02.2008 14:15:24
91.76.17.177
,
пустое
)
пример: $1234/$5678 = $D791 * (2^-18)
—
argus98
(04.02.2008 14:57:24
81.22.205.230
,
пустое
)
И как получено число D791?
—
Oldring
(04.02.2008 14:58:13
91.76.17.177
,
пустое
)
Делением столбиком до тех пор, пока не появится 16 значащих разрядов (считая от первой (старшей) единички результата) - это для 16 бит варианта. Для другой разрядности - аналогично
—
argus98
(04.02.2008 15:04:3
81.22.205.230
,
пустое
)
Само деление столбиком-то целочисленное? ;)
—
Oldring
(04.02.2008 15:09:31
91.76.17.177
, 448 байт)
само собой: +, -, сдвиг, проверка знака
—
argus98
(04.02.2008 15:28:34
81.22.205.230
,
пустое
)
Не...;О) Там всё завязано на том, что старшый всегда у всех в "1". Для флоатофф, ессно. Ну и ещо експонента декрементируецца. Щщоччик ещо, ну, в общем, по мелочи ;О). Какой-то финн вывешивал.
—
-mse-
(04.02.2008 14:38:44
83.239.86.98
,
пустое
)
Финн? Для AVR?
—
Oldring
(04.02.2008 14:44:3
91.76.17.177
, 267 байт)
Иэссно, как иначе-то? ;О)
—
-mse-
(04.02.2008 14:59:43
83.239.86.98
,
пустое
)
Так че значит Ваше "Не" эсли это "Да"? ;)
—
Oldring
(04.02.2008 15:00:55
91.76.17.177
,
пустое
)
Диалектика!
—
-mse-
(04.02.2008 15:23:23
83.239.86.98
,
пустое
)
естественно. Там достаточно только сложения/вычитания и сдвиги.
—
argus98
(04.02.2008 13:59:46
81.22.205.230
,
пустое
)
Шутите! Небось в столбик целые числа делили!
—
Oldring
(04.02.2008 14:16:38
91.76.17.177
,
пустое
)
Ну и соотвествие Кнуту тоже может оказаться полезным для тех, кто Кнута читал. Речь не про ассемблерщиков, разумеется ;)
—
Oldring
(04.02.2008 13:04:50
91.76.17.177
,
пустое
)
В общем о чем спор?
—
Oldring
(04.02.2008 13:14:29
91.76.17.177
, 280 байт)
По науке не всегда может быть наиболее удобным в применении. Спор о том, даже не спор, а сбор информации, кому что нужно.
—
SM
(04.02.2008 13:33:21
80.92.255.53
,
пустое
)
Повбывав бы таких проектировщиков процов. Не обижайтесь, ничего личного ;)
—
Oldring
(04.02.2008 13:37:19
91.76.17.177
, 203 байт)
Я хочу спроетировать исходя из предпочтения большинства. А не своих и странных. В общем Вы свое предпочтение сказали, этого достаточно. +1 голос от вас есть.
—
SM
(04.02.2008 13:48:37
80.92.255.53
,
пустое
)
Вне всякого сомнения: проектировщик - только Вы ;) Кстати, голос Кнута - это для Вас сколько плюсов?
—
Oldring
(04.02.2008 13:56:58
91.76.17.177
, 100 байт)
Это когда делается операция, необходимая и с точно определенным заранее поведением. signed DIV к таким в данном проекте не относится.
—
SM
(04.02.2008 19:14:27
80.92.255.53
,
пустое
)
думаю что остаток, должен иметь знак частного.
—
Имперская Политика
(04.02.2008 12:00:46
208.73.49.114
,
пустое
)
ошибочка, знак остатка равен знаку делимого, без вариантов.
—
Имперская Политика
(04.02.2008 14:31:28
208.73.49.114
,
пустое
)
Пепевести всё в положительное, поделить, потом частному и остатку присвоить статус отрицательного ?
—
scorpion
(04.02.2008 11:58:10
80.249.153.52
,
пустое
)
:) Ну как это схемно реализовать я тоже знаю :)
—
SM
(04.02.2008 11:59:59
80.92.255.53
,
пустое
)
дык...
—
POV
(04.02.2008 11:57:28
213.137.239.62
, 136 байт)
как это математически выглядит - я в курсах. вопрос об удобстве использования в реальной жизни.
—
SM
(04.02.2008 11:59:31
80.92.255.53
,
пустое
)
Да. Остаток это делимое - делитель * частное. Т.е. остаток тоже с минусом
—
Пиков
(04.02.2008 11:59:24
87.241.200.1
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 63:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru