Почему умножение работает быстрее деления? — Хабр Q&A
насчет «лучше умножать на 0,5» хз, потому что плавающая точка, но, наверно да
а так все просто:
современный комп, и комп 20 лет назад, и комп 30 лет назад — это обычный транзистор
(когда изобретут фотонный проц — будет не обычный, хотя..)
а обычный транзистор имеет всего два состояния: 0 (нет напряжения) и 1 (идет ток)
и умеет транзистор этими двумя состояниями всего два действия:
первое: сложение (0+1 = 1, 0+0=0, 1+1 = 01 и т.п.)
второе: смена знака (честно — уже не помню как там куда идет ток в этом случае)
все. больше ничего комп не умеет.
потому арифметика реализуется примерно так:
сложение: первое число СЛОЖ второе число
вычитание: первое число СМЕНЗНАК второе число СЛОЖ первое число
умножение: много раз СЛОЖ и занесение в стек, что тоже СЛОЖ
деление: многораз СЛОЖ и зансение в стек + чуть меньше раз СМЕНЗНАК и снова в стек
как видишь, при делении больше всего операций, по сути деление — это куча сложений с разным знаком, и величина кучи больше кучи уножений
отсюда же растут ноги у точности плавающей точки — СЛОЖ и СМЕНЗНАК тоже нужно сделать кучу раз в зависимости от точности
Ответ написан 2016, в 00:09″> более трёх лет назад
Во-первых, это касается только компилируемых ЯП в которых целые и действительные числа представлены нативными типами данных аппаратной платформы. То есть 8/16/32/64-целые и 32/64/80-битные действительные. Все это никаким образом не касается динамических скриптов, а также языков, в которых числа по-умолчанию с длинной арифметикой или пределы значений не указаны в спецификации языка (обычно это означает использование длинной арифметики) — во всех этих случаях вычисления будут идти в десятки/сотни/тысячи раз медленнее чем на голом железе и разницы между умножением и делением (а также другими операциями) не будет заметно вообще.

Ответ написан
Комментировать
По сути процессор умеет работать только с битами
С целыми числами все выглядит давольно просто:
1й бит числа определяет знак числа — 0 для положительных и 1 для отрицательных
У нас есть операции для управления битами:
- ~ инверсия
- & конъюнкция
- | дизъюнкция
- >> сдвиг вправо
- << сдвиг влево
введем арифметические операции по порядку:
- Сложение, сводится по сути к сложению битов в столбик
- Отрицание или смена знака, -a выражается как ~a + 1
- Вычитание a — b выражается через a + -b
- Умножение, тут несколько вариантов, зависит от компилятора и его оптимизатора:
- Умножение на степени 2 можно представить сдвигом влево: a * 8 приводится к a << 3 т.
к. 8 — это 3я степень 2
- Простые случаи вроде a * 3 можно заменить на a + a + a
- Случаи по сложнее a * 11 складывать a 11 раз само с собой не оптимально
раскладываем 11 на степени 2: 11 = 8 + 2 + 1
вычисляем (a << 3) + (a << 1) + a
- Умножение на степени 2 можно представить сдвигом влево: a * 8 приводится к a << 3 т.
С вещественными числами все обстоит сложнее, они тоже представлены в виде битов, но часть битов отводится под целую часть, а часть под мантиссу
Операции над вещественными числами с ненулевой мантиссой более затратны по количеству тактов процессора
Здесь нам понадобятся такие вещи как экспонента и натуральный логарифм, которые можно вычислить в виде суммы ряда, так же через суммы ряда вычисляются многие другие математические функции
Имея экспоненту и логарифм можно выразить степенную функцию
Деление же можно представить через умножение и степени
Вот такая вот высшая математика над двоичными числами происходит «за кадром» наших с виду простых программ 🙂
Ответ написан 2016, в 03:16″> более трёх лет назад
Комментировать
Деление и умножение в Assembler
Здравствуйте, уважаемые друзья! Продолжаем изучать нашу рубрику, на очереди тема умножения и деления в Assembler. Разберемся со всеми тонкостями этих операций, конечно же, на практическом примере.
Основные команды
- Для умножения в Assembler используют команду
mul
- Для деления в Assembler используют команду
div
Правила умножения в Assembler
Итак, как мы уже сказали, при умножении и делении в Assembler есть некоторые тонкости, о которых дальше и пойдет речь. Тонкости эти состоят в том, что от того, какой размерности регистр мы делим или умножаем многое зависит. Вот примеры:
- Если аргументом команды mul является 1-байтовый регистр (например
mul bl
), то значение этого регистра bl умножится на значение регистра al, а результат запишется в регистр ax, и так будет всегда, независимо от того, какой 1-байтовый регистр мы возьмем.bl*al = ax
- Если аргументом является регистр из 2 байт(например
mul bx
), то значение в регистре bx умножится на значение, хранящееся в регистре ax, а результат умножения запишется в регистр eax.bx*ax = eax
- Если аргументом является регистр из 4 байт(например
mul ebx
), то значение в регистре ebx умножится на значение, хранящееся в регистре eax, а результат умножения запишется в 2 регистра: edx и eax.ebx*eax = edx:eax
Правила деления в Assembler
Почти аналогично реализуется и деление, вот примеры:
- Если аргументом команды div является 1-байтовый регистр (например
div bl
), то значение регистра ax поделится на значение регистра bl, результат от деления запишется в регистр al, а остаток запишется в регистр ah.ax/bl = al, ah
- Если аргументом является регистр из 2 байт(например
div bx
), то процессор поделит число, старшие биты которого хранит регистр dx, а младшие ax на значение, хранящееся в регистре bx. Результат от деления запишется в регистр ax, а остаток запишется в регистр dx.(dx,ax)/bx = ax, dx
- Если же аргументом является регистр из 4 байт(например
div ebx
), то процессор аналогично предыдущему варианту поделит число, старшие биты которого хранит регистр edx, а младшие eax на значение, хранящееся в регистре ebx. Результат от деления запишется в регистр eax, а остаток запишется в регистр edx.(edx,eax)/ebx = eax, edx
Программа
Далее перейдем к примеру: он не должен вызвать у вас каких либо затруднений, если вы читали наши предыдущие статьи, особенно важна статья про вывод на экран, советую вам с ней ознакомиться. Ну а мы начнем:
.386 .model flat,stdcall option casemap:none include ..\INCLUDE\kernel32.inc include ..\INCLUDE\user32.inc includelib ..\LIB\kernel32.lib includelib ..\LIB\user32.lib BSIZE equ 15 .data ifmt db "%d", 0 ;строка формата stdout dd ? cWritten dd ? CRLF WORD ? .data? buf db BSIZE dup(?) ;буфер
Стандартное начало, в котором мы подключаем нужные нам библиотеки и объявляем переменные для вывода чисел на экран. Единственное о чем нужно сказать: новый для нас раздел .data? Знак вопроса говорит о том, что память будет выделяться на этапе компилирования и не будет выделяться в самом исполняемом файле с расширением .exe (представьте если бы буфер был большего размера) . Такое объявление — грамотное с точки зрения программирования.
.code start: invoke GetStdHandle, -11 mov stdout,eax mov CRLF, 0d0ah ;-------------------------деление mov eax, 99 mov edx, 0 mov ebx, 3 div ebx invoke wsprintf, ADDR buf, ADDR ifmt, eax invoke WriteConsoleA, stdout, ADDR buf, BSIZE, ADDR cWritten, 0 invoke WriteConsoleA, stdout, ADDR CRLF, 2, ADDR cWritten,0
В разделе кода, уже по традиции, считываем дескриптор экрана для вывода и задаем значения для перевода каретки. Затем помещаем в регистры соответствующие значения и выполняем деление регистра ebx, как оно реализуется описано чуть выше. Думаю, тут понятно, что мы просто делим число 99 на 3, что получилось в итоге выводим на экран консоли.
;-------------------------умножение mov bx, 4 mov ax, 3 mul bx invoke wsprintf, ADDR buf, ADDR ifmt, eax invoke WriteConsoleA, stdout, ADDR buf, BSIZE, ADDR cWritten, 0 invoke ExitProcess,0 end start
Думаю, что здесь тоже все понятно и без комментариев. Как производиться умножение в Assembler вы тоже можете прочитать чуть выше, ну и результат выводим на экран.
Просмотр консоли
Этот код я поместил в файл seventh.asm, сам файл поместил в папку BIN (она появляется при установке MASM32). Далее открыл консоль, как и всегда, с помощью команды cd
перешел в эту папку и прописал amake.bat seventh
. Скомпилировалось, затем запускаю исполняемый файл и в консоли получаются такие числа:
Как видите, мы правильно посчитали эти операции.
На этом сегодня все! Надеюсь вы научились выполнять деление и умножение на Assembler.
Скачать исходники
Делениекак противоположность умножения — Математика 3 класса
На последних уроках вы узнали, что деление означает деление чисел на равные группы.
Давайте посмотрим.
12 ÷ 3 = ?
Нарисуем 12 точек:
Наш делитель равен 3, поэтому мы хотим разделить 12 на 3 равные группы. Взгляните:
Сколько точек в каждом круге?
4!
Итак, это означает:
12 ÷ 3 = 4
Вернемся к нашей диаграмме:
Мы также можем использовать эту диаграмму для записи задачи на умножение!
На нашей диаграмме 3 группы по 4 точки. Всего 12 точек.
Всякий раз, когда у вас есть уравнение умножения, вы также можете написать родственное деление уравнение с теми же числами.
Взгляните!
Хорошо! Давайте попробуем еще один!
Подсказка: Вы помните, как сложение и вычитание имеют семейства фактов? Умножение и деление тоже имеют семьи фактов!
Другой пример
Начнем с тех же 12 точек:
На этот раз решим уравнение:
12 ÷ 6 = ?
Создадим 6 равных групп:
Сколько точек в каждой группе? 2!
Это означает:
12 ÷ 6 = 2
Какую задачу на умножение можно написать по той же схеме? 🤔
6 х 2 = 12
Отличная работа!
Последний пример
Давайте попробуем последний пример без каких-либо диаграмм.
15 ÷ 5 = 3
Можете ли вы составить родственное уравнение умножения?
Давай подумаем! 🤔
15 наша сумма.
5 и 3 детали.
Это означает:
5 x 3 = 15
Отличная работа! У тебя вышло. ✅
Теперь завершите практику. 😺
D’autres travaux sont consacrs au comportement de […]
Cellules Vivan TE S ( Дивизион , Умножение , S . vitalit) Интерфейс с матриками. empa.ch empa.ch | Ведутся дополнительные исследования […] для изучения поведения […] ливин г клетки (е .г. деление, размножение , сп эциа 0лизация, […] живучесть) на граничных поверхностях материалов. empa.ch empa.ch |
Ils permett de Faire Rapidement […] Дополнительные операции, де […] soustraction , d e division , d e multiplication e t d e totalisation, […] автоматический пересчетчик [. tous les rsultats plus tard si de nouvelles donnes sont entres. statcan.gc.ca statcan.gc.ca | Сложение, s убтра cti on, деление, умножение и d tot […] сделать очень быстро, и все результаты могут быть автоматически […] пересчитывается позже, если вставляются новые данные. statcan.gc.ca statcan.gc.ca |
Ils sont trs utiles lorsqu’il s’agit де манипулятор де картин. Ils Permettent de Faire Rapidement […] Дополнительные операции, де […]
вытяжка , d e деление , d e умножение e t d e суммирование, [. автоматический пересчетчик […] tous les rsultats plus tard si de nouvelles donnes sont entres. statcan.gc.ca statcan.gc.ca | Дополнение, su btrac tio n, деление , м умножение а й до та линг […] сделать очень быстро, и все результаты могут быть автоматически […] пересчитывается позже, если вставляются новые данные. statcan.gc.ca statcan.gc.ca |
Notant les responsabilits attribues au Secrtaire gnral par la Convention et parses propres rsolutions sur la question, en special ses rssolutions 49/28, 52/26 et 54/33 et, cet gard, […] le dveloppement des […]
activits d e l a Division , d en particulier l a multiplication d e s продуктов [. qu’on lui demande d’excuter et des runions dont elle est prie d’assurer le service, l’accroissement des activits de renforce des capacits, la ncessit d’amliorer l’appui et l’aide appports la Commission et a urle de la Division dans la координация и др. la coopration interinstitutions daccess-ods.un.org daccess-ods.un.org | Отмечая обязанности Генерального секретаря в соответствии с Конвенцией и соответствующими резолюциями Генеральной Ассамблеи, в частности резолюциями 49/28, 52/26 и 54/33, а в […] в данном контексте увеличение […] in acti vi ties of th e Division, in pa rticu la […] запросов в отдел […] для дополнительных мероприятий и обслуживания совещаний, активизации деятельности по наращиванию потенциала, необходимости усиления поддержки и помощи Комиссии и роли Отдела в межучрежденческой координации и сотрудничестве daccess-ods. daccess-ods.un.org |
Емкость для добавления, дез […] soustractions, d e s divisions e t d e s multiplications a v ec prcision […] et rapidit psc-cfp.gc.ca psc-cfp.gc.ca | Возможность добавления, […] вычитание, умножение ly и деление чисел остроумие h скорость и точность psc-cfp.gc.ca psc-cfp.gc.ca 85 85 |
A. Математическая культура как способ […] servir de l’addition, de la […]
soustraction, d e l a multiplication , d e l a division e t d дроби, [. sous forme de calcul Mental […] et par crit, pour rsoudre divers problmes de la vie quotidienne. eur-lex.europa.eu eur-lex.europa.eu | A. Математическая компетентность – это способность использовать […] сложение, подпункт tr действие n, умножение, деление и ra tios i 901 […] и письменные вычисления для решения […] ряд проблем в повседневных ситуациях. eur-lex.europa.eu eur-lex.europa.eu |
Les ves peuvent rsoudre le […] проблемы с моим номером […]
l’addition , l a multiplication , l a soustraction o u l a division ( s e rfrer aux [. двойные премьеры экземпляры […] de la Figure 2 pour des rponses typiques). n5tn.com n5tn.com | Студенты […] можно складывать, умножать, вычитать ac t или делить на lv e эту задачу (см. первый […] два примера на рис. 2 для типовых решений). n5tn.com n5tn.com |
Quelques groupes de deux ves essaient de dterminer le nombre de sacs en mesurant la hauteur d’un sac […] де-билль-данс-ле-бокаль и др., […]
au moyen d e l a multiplication o u de l a отдел , e n калькулятор [. le nombre de sacs requis pour […] Aller de bas en haut du bocal. n5tn.com n5tn.com | Несколько пар учащихся пытаются определить необходимое количество сумок путем измерения высоты […] один мешок шариков в […] банка, а затем мул ти плын г вверх о р разделительная к ф в д сколько мешков […] необходимы, чтобы достать до верха банки. n5tn.com n5tn.com |
En 1880, le cur d’Argozn (Chantada, Lugo), Don Benigno Ledo, installe la premire ruche mobiliste et, quelques annes plus tard, il […] конструкция ла премьер рюш судьба […]
notamment l a multiplication p a r division e t l’levage [. de reines, qu’il appelle ruche-ppinire. eur-lex.europa.eu eur-lex.europa.eu | В 1880 году приходской священник Аргозна (Чантада, Луго) Дон Бениньо Ледо заложил первый передвижной улей и несколько лет […] позже построил первый улей […] fo r bre edin g by Division an d for br e 9013 […] маток и назвал его ульем-питомником. eur-lex.europa.eu eur-lex.europa.eu |
Упражнения, используемые для простых способов […] qu’addition, subtract io n , multiplication , e t division . креациявики.орг креациявики.орг | Используется в простых методах, таких как [. креациявики.орг креациявики.орг |
O Tout calcul arithmtique simple fait intervenir deux nombres et une opration […] сложение, сустракт io n , умножение ou деление . calculatrices-hp.com calculatrices-hp.com | Любое простое арифметическое вычисление включает два числа и операцию […] сложение, s убтра cti on, умножение, или деление . calculatrices-hp.com calculatrices-hp.com |
Четыре основных математических операции, […]
вычитание , l a multiplication , e t l a division . креациявики.орг креациявики.орг | Четыре основных математических операции […] сложение, с утр действие на , умножение, d отдел . креациявики.орг креациявики.орг |
Proposer une remise niveau gnral des mathmatiques de base (экспликация, представление […] pratique) en vrifiant que chaque участника comprend le content (дополнение, […] soustract io n , умножение , подразделение е т с . базовые навыки для работы.org базовые навыки для работы.org | Обеспечивает общее освежение базовой математики (объяснение и […] демонстрация) и убедитесь, что каждый участник понимает содержание [. базовые навыки для работы.org базовые навыки для работы.org |
использование арифметических формул основания (дополнение, […] Souststract IO N , Умножение , Дивизион ) D) D0 . расчёт europa.eu europa.eu | использовать базовую арифметику […] Формула (Add, вычитание , умножение LY, Divide ) в A S PR EADSHEET EUROPA.EU .EUPAISTAPE 8 9.EU 6.EUPA 9.EU 9.EU 9.EU 9.EU 9.EU 9.EU 9.EU.EU |
Les oprations mathmatiques disponibles sont l’addition, la [. distrelec.de:443 distrelec.de:443 | Стандартные математические функции включают […] сложение, sub tr acti on, умножение , деление, и d FF T . distrelec.de:443 distrelec.de:443 |
Арифметические операции (c’est—dire […] Кроме того, Souststract IO N , Умножение , Дивизион ) S ). и трансформаторные полосы […] оригиналы в «новых» изображениях, которые можно увидеть, а также определенные сведения о сцене. cct.rncan.gc.ca cct.rncan.gc.ca | Арифметические операции (например, […] вычитание io n, ad dit ion , умножение, деление) a re per образует 0 d в сочетании […] и преобразовать исходный […] объединяются в «новые» изображения, которые лучше отображают или выделяют определенные особенности сцены. cct.rncan.gc.ca cct.rncan.gc.ca |
Addit IO N , Умножение , Дивизион E T ou T … SO T … SU … SU . серия imcce.fr imcce.fr | a d dit ion , умножение, деление an d s ubt racti на массивов [. серии imcce.fr imcce.fr |
Дополнительные функции: […] добавление, выпаривание, […] Максимум SLECTION / MINI MU M , Умножение , Дивизион , 9 , 9 , 9 , 9 , , , и др. экстракт расина. prelectronics.fr prelectronics.fr | Содержит следующий расчет […] функции: сложение, вычитание, максимум / […] минимум m sele cti on, умножение, деление, r ais ing до мощность и […] экстракция корня. prelectronics.it prelectronics.it |
Enfin, de nombreux concepts mathmatiques ont t tudis (pendant une dure que j’ai referne aauparavant) par ce groupe d’lves de sixime au moyen d’un scnariointeractif domin par la problmatisation et qui […] транспортный, между прочим, […] LES Choes Suivan TE S : Умножение , Дивизион , 9 , 999999999. . мультипликативы, собственные дистрибутивные и временные. iiz-dvv.de iiz-dvv.de | Наконец, многие математические понятия были изучены этой группой шестиклассников с помощью интерактивного метода проблематизации (в течение […] период, указанный выше), [. мультипликативные операторы, […] распределительная собственность и среднее. iiz-dvv.de iiz-dvv.de |
Vous devriez vous ознакомление с дополнением, la […] soustraction , l a multiplication , l a division , l ‘e xpression de […] наливки и напитки, […] дроби и финансовые расчеты. psc-cfp.gc.ca psc-cfp.gc.ca | Вы должны быть знакомы с […]
сложение, sub tr actio n, умножение, деление, p erce ntag es, [. дроби и финансовые расчеты. psc-cfp.gc.ca psc-cfp.gc.ca |
Deux переменные mesures (p. ex., x et y) ayant des incertitudes (?x et ?y) pourraient tre uses pour calculer une nouvelle valeur, z. Les deux sous-sections qui suivent prsentent les formules […] использует калькулятор неопределенности ?z sur la valeur de z en cas […] d’сложение/выведение e t d e умножение/деление . ec.gc.ca ec.gc.ca | Две измеренные переменные (например, x и y) с неопределенностями (?x и ?y) могут использоваться для расчета нового значения z. Следующие два подраздела […] предоставить формулы, которые используются для расчета неопределенности, ?z в z для […]
сложение/su bt ract ion an d умножение/деление . ec.gc.ca ec.gc.ca |
Circuit lectronique intgr d e умножение/деление d e f 90ncer […] Множитель/делитель частоты сигнала […] de rfrence, составная часть схемы: однофазное изменение фазы, PLL, наполнение номером M de de d’hrloge partir du signal de rfrence; et un dcaleur designal, qui est unmultiplexeur, MUX (31), связь с электричеством для PLL для dcaler le signal de rfrence d’une Chaque cycle K/M, dans lequel le MUX (31) с соединением с электричеством для выхода PLL , et dans lequel (K+1)/K est un nombre diviseur et K/(K-1) est nombre multiplicateur, caractris en ceque, le chain comprend en outre un quantificateur (44) coupl lectriquement au MUX (31) для командира l’entre du MUX. v3.espacenet.com v3.espacenet.com | Встроенный [. |
2 . EC.G.CA 6.G.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA.CA. | 2 .2 Умножение/Деление Tw o V ariab le s ec.gc.ca ec.gc.ca |
Распоряжение о контроле над ошибками в дополнительных операциях, […] soustract io n , multiplication , division e t r acine carre v3.espacenet.com v3.espacenet.com | Устройство для проверки остатков для обнаружения ошибок в […] add, substrac t, multi ply , divide a nd squar e root operations v3. v3.espacenet.com |
Приобретение келей […] базы концерна t l a умножение , l a дивизия e t l es unit de mesure iiz-dvv.de ideiz-dvv.de ideiz-dvv.de . | Приобретение BASI C Идея из Умножение, Дивизион и ME ASURE ME NT 9013 ASURE ME NT DITS 111111111110111,11111110111011,11111110111011,1129 . |
Модуль Ce содержит 6 упражнений […] lmentaires (qours de cours) sur les nombres […]
Комплексы: Addit IO N , Умножение , Дивизион , , 1339, , 139, , . Формирование.cfai-centre.net | Этот модуль содержит 6 упражнений по базовым понятиям […] комплексное число er s: ad dit io n, умножение, деление, co nj ugu 9 dule, |
Формула peut tre de […] разные типы: дополнение io n , multiplication , division , c ar r, composition, […] обратный, приводной, встроенный или смешанный. Формирование.cfai-centre.net Формирование.cfai-centre.net | Формула может быть […]
другой тип es : объявление дити на , умножение, деление, s qu are, com po sition, [. инверсия, дифференцирование, интегрирование и т.д. |
Важные функции других продуктов, включая встроенную память Flash, 32Ko, интеллектуальный блок ШИМ, быстрый преобразователь аналогового номера […] цена 10 бит, ип […] CORDIC et une Единица d e Умножение/Деление ( M Расчеты DU 9013 […] математических скоростей. infineon-designlink.com infineon-designlink.com | Дополнительные ключевые функции включают до 32 КБ встроенной флэш-памяти, интеллектуальный блок ШИМ, высокоточный […] 10-разрядный АЦП с быстрым преобразованием […]
скорость, a CO RDIC и a Разделение умножения U nit (M DU) f или 90 fast [. математические вычисления. infineon-designlink.com infineon-designlink.com |
Постоянный контакт […] залить исчисления рпт S D E Умножение , Дивизион E T PA E T PA E T PA . jackblackdata.com jackblackdata.com | R e торф key fo r умножение, деление an d p erc entag e 9 вычисления. jackblackdata.com jackblackdata.com |
калькулятор, […]
un calcul isol sur des nombres relatifs en criture dcimale : addition, soustract io n , multiplication , division d ci male 10 — n prs, calcul du carr, du cube d’un nombre relatif, racine carre d’un [. |