Ниже приведена таблица истинности десятичного полного (тринарного, трёхаргументного, трёхоперандного) сумматора:
A 9876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210->
B 9999999999888888888877777777776666666666555555555544444444443333333333222222222211111111110000000000->
C 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111->
------------------------------------------------------------------------------------------------------------------------------------------------------------------
S 9876543210876543210976543210986543210987543210987643210987653210987654210987654310987654320987654321->
C 1111111111111111111011111111001111111000111111000011111000001111000000111000000011000000001000000000->
A 9876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210
B 9999999999888888888877777777776666666666555555555544444444443333333333222222222211111111110000000000
C 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
------------------------------------------------------------------------------------------------------------------------------------------------------------------
S 8765432109765432109865432109875432109876432109876532109876542109876543109876543209876543219876543210= F3DecimalS
C 1111111110111111110011111110001111110000111110000011110000001110000000110000000010000000000000000000= F3DecimalC
Так как третий аргумент (C, "перенос в следующий разряд") не бывает больше 1, то таблица имеет всего 10*10*2=200 колонок.
По вышеприведённой таблице на Turbo Basic'е была написана программа табличного последовательного полного десятичного сумматора и сложены два 16-ти разрядных (16-ти децитных) целых числа без знака:
Code: Select all
CLS
COLOR 10,0
'adder initialisation
dim F3DSumMod%(9,9,1),F3DCarry%(9,9,1)
F3DSumMod$="98765432108765432109765432109865432109875432109876432109876532109876542109876543109876543209876543218765432109765432109865432109875432109876432109876532109876542109876543109876543209876543219876543210"
F3DCarry$ ="11111111111111111110111111110011111110001111110000111110000011110000001110000000110000000010000000001111111110111111110011111110001111110000111110000011110000001110000000110000000010000000000000000000"
for k%=0 to 1
for j%=0 to 9
for i%=0 to 9
n%=i%+j%*10+k%*100
F3DSumMod%(i%,j%,k%) = VAL(MID$(F3DSumMod$,200-n%,1))
F3DCarry% (i%,j%,k%) = VAL(MID$(F3DCarry$, 200-n%,1))
next i%
next j%
next k%
'input numbers
' 6543210987654321
A$="0009009009009009"
B$="0005006007008009"
C%=0
PRINT A$
PRINT B$
PRINT "----------------"
DIM A%(15),B%(15),S%(15)
FOR I%=0 TO 15
A%(I%)=VAL(MID$(A$,16-I%,1))
B%(I%)=VAL(MID$(B$,16-I%,1))
NEXT I%
MTIMER
'adding
FOR I%=0 TO 15
S%(I%)=F3DSumMod%(A%(I%),B%(I%),C%)
C% =F3DCarry% (A%(I%),B%(I%),C%)
NEXT I%
ElapsedTime=MTIMER
FOR I%=15 TO 0 STEP -1
PRINT CHR$(S%(I%)+&H30);
NEXT I%
PRINT
PRINT USING "Elapsed time=### microseconds ";ElapsedTime
END
Результат выполнения программы приведён на скриншоте ниже:
DecimalAdder.JPG
В первой строке на скриншоте - первое слагаемое.
Во второй строке на скриншоте - второе слагаемое.
В третьей строке на скриншоте - сумма.
В четвёртой строке на скриншоте - время выполнения одного последовательного 16-ти децитного сложения
в микросекундах (
те же самые 88 микросекунд).
Выводы:
1. При последовательном суммировании на табличных 16-ти разрядных сумматорах расход памяти на одно число
приблизительно в 16-ть раз больше, поэтому этот способ пригоден только для ограниченного круга вычислительных
задач с малым (приблизительно в 16-ть раз меньшим) количеством чисел.
2. При последовательном суммировании на табличных сумматорах
время суммирования почти не зависит от величины
основания системы счисления и количества переносов при суммировании.
3. Приблизительно при одном и том же времени суммирования (
те же самые 88 микросекунд) диапазон сумм (
мощность множества сумм)
последовательного табличного десятичного 16-ти децитного сумматора
в 10^16/2^16 = 5^16 = 152 587 890 625 раз (более чем на 11 порядков) больше (мощнее) диапазона сумм
(мощности множества сумм)
последовательного табличного двоичного 16-ти битного сумматора.
4. При сумматорах с последовательным сложением переход на десятичную систему счисления может существенно
(более чем на 11 порядков) уменьшить время решения некоторых вычислительных задач с малым количеством чисел
даже на существующих двоичных контроллерах и двоичных компьютерах.
You do not have the required permissions to view the files attached to this post.