В двоичном виде 250500 * 250500 = 62 570 250 000 выглядит следующим образом:
0011 1101 0010 1000 0100 * 0011 1101 0010 1000 0100 =
0110 1001 1100 0011 0100 1101 0100 0001 0000
Твердые математические правила гласят, что вы можете поместить результаты 18-битного числа, умноженного на 18-битное число, в 36 бит. Твердые правила математики гласят, что вы не можете обязательно уменьшить биты от сжатия, поэтому есть некоторые ограничения, с которыми вам, возможно, придется иметь дело.
Тем не менее, могут быть некоторые варианты.
Компьютер может быть использован для отслеживания метров ... или километров.
Если вы отслеживали концепцию 50 километров, это практически то же самое, что отслеживать 50000 метров.
Аналогично, вместо отслеживания 250500 * 250500 = 62 570 250 000 (то есть 250 500 единичных единиц x 250 500 единичных единиц), вы можете отслеживать десятичные единицы, например, 25050x25050 = 627 502 500 (250 500 дека-единиц x 250 500 дека-единиц = 627 502 500 квадратных дека -единицы). Число 627 502 500 будет соответствовать 32-битному слову.
Опытный компьютерный программист должен рассмотреть, что представляет память компьютера (например, если часть памяти хранит информацию о единицах или десятичных единицах), и рассмотреть возможность корректировки, если есть преимущества (такие как обход ограничений, или, возможно, просто работа с быстрая скорость).
Возможно, вместо отслеживания дека-единиц (которые представляют собой группы из 10 единиц), вы можете отслеживать группы единиц, которые имеют разный размер, например, группы из 500 единиц. Концепция заключается в том, что если вы знаете, что ваши числа всегда будут четными, то вы можете разделить числа на два и, возможно, на меньшие единицы. (Хотя вам нужно поделить более чем на 2, чтобы получить конкретное максимальное значение 4 294 967 295.) Если вы можете отслеживать гекто-единицы (100 единиц каждый), вместо 250 500 * 250 500 у вас будет 2,505 * 2,505 = 6,275,025 (12 битов на 12 битов, для сохранения результата может потребоваться 24 бита, но в данном конкретном случае требуется только 23 бита). Если вы можете отслеживать Quinque гекто единиц (500), вы бы 501 * 501 = 251,001 (9 битов раз 9 битов, хранящихся в 18 бит).
Можно ли найти полезный шаблон - это один из аспектов полезного программирования, который выходит за рамки простого знакомства с языком программирования. Выполнение этого часто зависит от того, какую концепцию в реальном мире вы пытаетесь отслеживать, и выполнимость (и детали реализации) могут варьироваться в зависимости от различных реальных сценариев.
Изменить: Незначительная коррекция. Также расширен параграф около 500 единиц, чтобы показать фактические цифры в качестве демонстрации.