Как компьютер умножает числа

Обновлено: 01.07.2024

Как компьютер выполняет умножение на 2 числа, скажем, 100 * 55.

Моя догадка заключалась в том, что компьютер сделал повторное дополнение для достижения размножения. Конечно, это может иметь место для целых чисел. Однако для чисел с плавающей запятой должна быть какая-то другая логика.

Примечание. Это было задано в интервью.

ОТВЕТЫ

Ответ 1

Повторное добавление было бы очень неэффективным способом умножения чисел, представьте, что вы умножаете 1298654825 на 85324154. Гораздо быстрее использовать длительное умножение с помощью двоичного файла.

Для чисел с плавающей запятой используется научная нотация.

Чтобы умножить их вместе, умножьте мантиссы и добавьте показатели

Компьютер выполняет это с использованием двоичных эквивалентов

Ответ 2

Обычно используемый метод называется частичными продуктами, такими как люди, поэтому, например, имея 100*55 , он сделает что-то вроде

В основном старые подходы использовали алгоритм сдвига и накопления, в котором вы сохраняете сумму при смещении частичных продуктов для каждой цифры второго номера. Единственная проблема такого подхода заключается в том, что числа хранятся в 2-дополнении, поэтому вы не можете выполнять простой бит на бит умножения во время shifing.

В настоящее время большинство оптимизаций могут суммировать все частичные данные всего за 1 цикл, что позволяет быстрее вычислять и упрощать распараллеливание.

В конце вы можете найти некоторые реализации, такие как

Ответ 3

Один из способов - использовать длинное умножение в двоичном формате:

Ответ 4

Компьютеры используют алгоритм Бута или другие алгоритмы, которые выполняют перенос и добавление для арифметических операций. Если вы изучали курсы компьютерной архитектуры, книги по компьютерной архитектуре должны быть хорошим местом для изучения этих алгоритмов.

Ответ 5

Хорошо, вот иди. Я написал это некоторое время назад (1987!), Поэтому некоторые вещи изменились, в то время как другие остались теми же.

Ответ 6

Интуитивно вы можете свести к минимуму повторные добавления, также используя сдвиг.

В терминах поплавков эта статья выглядит довольно актуальной:

Ответ 7

Ответ 8

Чтобы умножить два числа с плавающей запятой, используется следующая процедура:

  • Умножьте мантиссы
  • Добавьте экспоненты
  • Нормализовать результат (десятичная точка появляется после первой ненулевой цифры)

Итак, в базе 10 для умножения 5.1E3 и 2.6E-2

Умножьте мантиссы = > 5.1 * 2.6 = 13.26 (это можно сделать с помощью целочисленного умножения, если вы отслеживаете, где должна быть десятичная точка)

Добавьте экспоненты = > 3 + -2 = 1

Дает нам результат 13.26E1

Нормализовать 13.26E1 = > 1.326E2

Ответ 9

Я просто кодирую простую программу, умножая два числа, хранящихся в 2 строках в файле, используя алгоритм длительного умножения. Он может умножать два числа, которые имеют более 1 миллиарда чисел друг в друге

Помните, как в школе умножали "столбиком"? Скажем, числа 52 и 37 умножают так:

Умножение двузначных чисел мы свели 1) к умножению однозначных (оно короткое), 2) к сложению, 3) и еще к сдвигу, эта операция настолько проста, что мы её и не замечаем. Она соответствует умножению на степень десятки, и «почти бесплатна»:

Умножение двух двузначных чисел требует четырех коротких умножений.

Умножение двух трехзначных чисел требует девяти коротких умножений.

Умножение двух N -значных чисел сводится к N ² коротким умножениям (и ещё к сложениям и сдвигам).

Для компьютерных вычислений умножение – самая затратная по времени операция, а сложение и тем более сдвиг – нет; поэтому сложность алгоритма умножения длинных чисел оценивают числом коротких, «однозначных» умножений. (Внутри компьютера числа представляются не так, как в школьных тетрадках, основание счисления будет не 10, а какая-то степень двойки, но для оценки это непринципиально.)

Примерно в 1956 году А.Н.Колмогоров предположил, что алгоритм c N ² “однозначными” умножениями – наилучший из всех возможных. В его семинаре участвовал молодой математик Анатолий Карацуба, который и опроверг гипотезу учителя. В 1960 году он придумал алгоритм, который работает быстрее.

Через них получается выражение для

А это все, что нужно знать, чтобы вычислить произведение:

Нам потребовалось не N ² операций, а только

Для умножения в столбик ручкой на бумаге этот метод неудобен. У него нет такой элегантной формы записи, им сложнее овладеть, да и выигрыша во времени в бытовых ситуациях он не дает. Но для компьютерного умножения очень длинных чисел это заметное улучшение.

Как это бывает в математике, после первого шага началась гонка за наилучшим результатом. Всегда приятно поставить рекорд: найти больше всех цифр числа π или самое большое простое число.

Немецкие математики Арнольд Шёнхаге и Фолькер Штрассен в 1971 году придумали, как использовать быстрое преобразование Фурье, чтобы умножать большие числа еще быстрее. Они свели задачу умножения чисел к задаче умножения многочленов, и применили к таким функциям быстрое преобразование Фурье. (По версии журнала Computing in Science & Engineering БПФ – один из 10 важнейших алгоритмов ХХ столетия.) Теперь можно было умножать за

операций. И в XX веке все компьютеры так и умножали. Но сами Арнольд Шёнхаге и Фолькер Штрассен выдвинули две гипотезы: 1) что можно умножать еще быстрее – за N log ( N ), и 2) что это уже нижняя граница, быстрее умножить не получится.

В 2007 году Мартин Фюрер предложил алгоритм еще шустрее, но который все же не достиг идеала в N log ( N ).

Его достигли в этом году Дэвид Харви и Йорис ван дер Ховен (DAVID HARVEY AND JORIS VAN DER HOEVEN). Они опубликовали два новых алгоритма , которые оба требуют N log ( N ) простых операций. Первый технически проще, но опирается на недоказанное предположение о простых числах в арифметических прогрессиях. Второй требует изощренной техники, но зато достигает идеала без всяких недоказанных предположений.

Первая гипотеза Шёнхаге и Штрассена таким образом доказана, а вторая еще ждет своих героев. Математики научились умножать быстро и еще быстрее, но пока не знают: правда ли, что быстрее уже некуда.

Как компьютер выполняет умножение на 2 числа, скажем, 100 * 55.

Я предполагал, что компьютер сделал повторное сложение для достижения умножения. Конечно, это может быть в случае с целыми числами. Однако для чисел с плавающей запятой должна быть какая-то другая логика.

Примечание: это было задано в интервью.

повторное сложение было бы очень неэффективным способом умножения чисел, представьте себе умножение 1298654825 на 85324154. Гораздо быстрее просто использовать длинное умножение с помощью binary.

для чисел с плавающей запятой используется научная нотация.

чтобы умножить их вместе, умножьте мантиссы и добавьте показатели

компьютер делает это, используя двоичные эквиваленты

обычно используемый метод называется частично продукты как люди делают, так, например, 100*55 он будет делать что-то вроде

в основном старые подходы использовали алгоритм сдвига и накопления, в котором вы сохраняете сумму при сдвиге частичных произведений для каждой цифры второго числа. Единственная проблема этого подхода заключается в том, что числа хранятся в 2-дополнении, поэтому вы не можете делать простое умножение на бит shifing.

В настоящее время большинство оптимизации способны суммировать все партиалы всего за 1 цикл, что позволяет быстрее вычислять и легче распараллеливать.

в конце вы можете найти некоторые реализации, такие как

один из способов - использовать длинное умножение в двоичном формате:

это иногда называют shift и добавить метод.

компьютеры используют алгоритм бута или другие алгоритмы, которые делают сдвиг и добавление для арифметических операций. Если вы изучали курсы компьютерной архитектуры, книги по компьютерной архитектуре должны быть хорошим местом для изучения этих алгоритмов.

хорошо, вот так. Я написал это некоторое время назад (1987!), так что некоторые вещи изменились в то время как другие остаются неизменными.

интуитивно вы можете минимизировать повторные добавления, также используя сдвиг.

с точки зрения поплавков эта статья выглядит довольно актуальной:

для умножения двух чисел с плавающей запятой используется следующая процедура:

  1. умножьте мантиссы
  2. добавить показатели
  3. нормализовать результат (десятичная точка появляется после первой ненулевой цифры)

Итак, в базе 10 умножить на 5.1Е3 и 2.6 Е-2

умножьте мантиссы = > 5.1 * 2.6 = 13.26 (NB это можно сделать с целочисленным умножением, если вы отслеживаете, где десятичная точка должна be)

добавить показатели => 3 + -2 = 1

дает нам результат 13.26E1

нормализовать 13.26E1 => 1.326E2

Я просто код простой программы умножить два числа, хранящиеся в 2 строки в файле с помощью алгоритма длинного умножения. Он может умножить два числа, которые имеют более 1 миллиарда чисел друг в друге

Компьютеры превращают каждое число в двоичное. Числа, которые мы используем, выражены в базе 10. Каждые 10 1 равны 1 десять, каждые 10 десятков равны 100, и так далее. В двоичном коде вы увеличиваете единицу каждые 2 числа. Таким образом, 2 равны 1 два, 2 двойки равны 1 4 и так далее. Например, число 9 будет 1001 в двоичном виде: 1 один, 0 двойок, 0 четверок и 1 восемь. 1 + 8 = 9. Компьютеры делают это, потому что легче проектировать схемы, которые имеют только значения 1 или 0, чем схемы с 10 отдельными значениями в каждой.

прибавление

Компьютеры имеют базовые математические операции, такие как сложение и вычитание, запрограммированные в них. Добавить в двоичном виде чрезвычайно просто. Если у вас есть 2 числа со значением 1, вы сохраняете 0 и перемещаете перенос 1. В противном случае вы записываете большее из двух чисел в этом слоте. Например, если вы добавляете 5 + 4, вы получаете: 0101 + 0100. В первом слоте у вас есть 1 + 0, поэтому вы сохраняете большее число: 1. Во втором слоте у вас есть два 0, поэтому Вы сохраняете 0 (так как оба числа одинаковы. В третьем слоте у вас есть две 1, поэтому вы сохраняете 0 и носите 1. В итоге вы получите число 1001 или 9.

Умножение.

Компьютеры используют длинное умножение, но они делают это в двоичном формате. Если компьютер умножает число на 1, он возвращает 1. Это гораздо более простая система, чем основание 10, даже если он требует больше шагов. Например, в базе 10 задача 8 * 9 - это простая одношаговая задача без длительного умножения. Однако в двоичном виде каждое число имеет длину 4 цифры, а решение имеет длину 7 цифр!

Вычитание

Вычитание выполняется в два этапа. Вместо того, чтобы вычитать число, двоичный компьютер добавляет свой комплимент, число с теми, где в оригинале есть нули, и нулями, где в оригинале есть единицы. Например, тогда как 4 - 0100 в двоичном, отрицательное 4 - 1011. Таким образом, для 7 - 4 мы получаем 0111 + 1011 = 10010. Число с левой стороны затем перемещается вправо, давая нам 0011 = 3.

Как изменить десятичные числа в смешанные числа

Как изменить десятичные числа в смешанные числа

Научиться преобразовывать десятичное число в смешанное не просто занятая работа; это имеет большое значение при выполнении математических операций или интерпретации результатов. Например, при работе с алгеброй почти всегда проще работать с дробями, а дроби облегчают обработку измерений в единицах США.

Как заменить неправильные дроби на смешанные числа или целые числа

Как заменить неправильные дроби на смешанные числа или целые числа

Для многих детей и взрослых дроби создают определенные трудности. Это особенно верно для неправильных дробей, в которых числитель или верхнее число больше, чем знаменатель или нижнее число. Даже когда педагоги пытаются соотнести дроби с реальной жизнью, сравнивая дроби, например, с кусочками пирога, .

Как изменить смешанные числа в целые числа

Смешанные числа почти всегда включают целое число и дробь - поэтому вы не можете полностью изменить их на целое число. Но иногда вы можете еще больше упростить это смешанное число или выразить его как целое число с последующим десятичным числом.

Читайте также: