Табличные N-ричные сумматоры на Бэйсике

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

AndrejKulikov
Banned
Posts: 315
Joined: 07 Mar 2018 23:17
Location: Россия, Москва

Re: Табличные N-ричные сумматоры на Бэйсике

Post by AndrejKulikov »

Табличный шестнадцатиричный полный (трёхаргументный, трёхоперандный, трёхвходовой) последовательный
16-ти гексадецитный (16-ти разрядный) сумматор


Так как в разряде переноса не бывает значения больше 1, то таблица истинности имеет 16*16*2=512 колонок,
которые из-за большой величины здесь не приводятся, но гексадециты суммы по модулю 16 и переноса
выводятся на экран и приведены на скриншоте результата выполнения нижеприведённой программы
на Turbo Basic'е:

Code: Select all

CLS
COLOR 10,0

'adder initialisation
DIM HexaDecimal$(15),HDTD$(15),HDTD%(15)
DATA "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"
FOR I%=0 TO 15
  READ HexaDecimal$(I%)
NEXT I%

DIM F3HDS%(15,15,1),F3HDC%(15,15,1)

FOR K%=0 TO 1
  FOR J%=0 TO 15
    FOR I%=0 TO 15
      F3HDS%(I%,J%,K%)=(I%+J%+K%) MOD 16
      F3HDC%(I%,J%,K%)=(I%+J%+K%) \ 16
      PRINT HexaDecimal$(F3HDS%(I%,J%,K%));
    NEXT I%
  NEXT J%
NEXT K%
PRINT
FOR K%=0 TO 1
  FOR J%=0 TO 15
    FOR I%=0 TO 15
      F3HDC%(I%,J%,K%)=(I%+J%+K%) \ 16
      PRINT HexaDecimal$(F3HDC%(I%,J%,K%));
    NEXT I%
  NEXT J%
NEXT K%
PRINT
PRINT

'input numbers
A$="000F00F00F00F00F"
B$="000B00C00D00E00F"
C%=0
PRINT A$
PRINT B$
PRINT "----------------"

DIM A$(15),B$(15),A%(15),B%(15),S%(15)
FOR I%=0 TO 15
  A$(I%)=MID$(A$,16-I%,1)
  IF ASC(A$(I%))<58 THEN A%(I%)=VAL(A$(I%)) ELSE A%(I%)=ASC(A$(I%))-&H37
  B$(I%)=MID$(B$,16-I%,1)
  IF ASC(B$(I%))<58 THEN B%(I%)=VAL(B$(I%)) ELSE B%(I%)=ASC(B$(I%))-&H37
NEXT I%

MTIMER
'adding
FOR I%=0 TO 15
  S%(I%)=F3HDS%(A%(I%),B%(I%),C%)
  C%    =F3HDC%(A%(I%),B%(I%),C%)
NEXT I%
ElapsedTime=MTIMER

FOR I%=15 TO 0 STEP -1
  PRINT HexaDecimal$(S%(I%));
NEXT I%
PRINT
PRINT
PRINT "It took";ElapsedTime;"microseconds"
END
Скриншот результатов выполнения программы:
HexaDecimalAdder.JPG
По времени выполнения сложения (88 микросекунд) видно, что при последовательном сложении на программных табличных сумматорах
время сложения почти не зависит от основания системы счисления и от количества переносов
.
Из этого следует, что при последовательном сложении на программных табличных сумматорах, чем больше основание системы счисления, тем больше мощность сумматора.
You do not have the required permissions to view the files attached to this post.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Табличные N-ричные сумматоры на Бэйсике

Post by Lavr »

AndrejKulikov wrote:По времени выполнения сложения (88 микросекунд) видно, что при последовательном сложении на программных табличных сумматорах
время сложения почти не зависит от основания системы счисления и от количества переносов
.
Из этого следует, что при последовательном сложении на программных табличных сумматорах, чем больше основание системы счисления, тем больше мощность сумматора.
Я всё же ещё раз задам простой вопрос, на который никак не могу получит от топикстартера ответа:
"На какой тактовой частоте микропроцессора время выполнения сложения на программных табличных сумматорах составляет 88 микросекунд?"

Складывается впечатление, что 88 микросекунд - это время, за которое TB выполняет приводимую выше программу, именно поэтому программный поиск по таблицам и занимает примерно одинаковое время и "почти не зависит от основания системы счисления и от количества переносов".
iLavr
AndrejKulikov
Banned
Posts: 315
Joined: 07 Mar 2018 23:17
Location: Россия, Москва

Re: Табличные N-ричные сумматоры на Бэйсике

Post by AndrejKulikov »

Дальнейшее увеличение мощности табличного сумматора
При основании системы счисления равной 65536 (16 битов, 2 байта) размер массива только с суммами по
модулю 65536 займёт
(2^16)*(2^16)*2=65536*65536*2 = 8 589 934 592 двубайтов, что при объёмах памяти современных
ПК не приемлемо.
При основании системы счисления равной 19683 (9 тритов, 1 девятитрит) размер массива только с суммами по
модулю 19683 займёт
(3^9)*(3^9)*2 = 774 840 978 девятитритов, что при объёмах памяти современных ПК также
не приемлемо.
При основании системы счисления равной 256 (8 битов, 1 байт) размер массива только с суммами по
модулю 256 займёт
(2^8)*(2^8)*2 = 256*256*2 = 131 072 байта, что приемлемо для объёмов памяти современных ПК,
но не на Turbo Basic'е с максимальным объёмом массивов 64 килобайта.