Дискусия за четвърти език - Страница 3

Форум за колекционери и потребители на стари компютри

страница

Достъп до база данни на System.cfg

Дискусия за четвъртия език

Re: Дискусия за четвъртия език

Съобщение от Доминика »30 март 2013 г. 12:17

ето програмата Factorial, преведена за MO05
Тази програма беше публикувана в списание FORTH DIMENSION, но не можах да намеря името на автора
Нека да видим подробностите:

1 - Едно от предимствата на Forth е преносимостта. По-лесно е да се преведе Forth
например от машина на друга, различна от Basic.
Все още трябва да внимавате:

а) Рикардо определя +! в началото, защото тази дума не съществува в речника му. За нас съществува, така че няма нужда.
б) Има DEFINE BYTE-ARRAY. Това е една от големите грешки на Юпитер Форт, която пропусна думата
За щастие тук преводът е лесен.

в) Думата? DUP в нашата Forth се нарича -DUP. Но това е същото (виж страница 4)


г) Думата ASCII не съществува в нашата Forth. Тъй като става въпрос за излъчване, ще поставим 44 директно (или 46 за точка).

д) В някои ЧЕТВЪРТИ ТОГАВА се заменя с ENDIF.

е) В оригиналния списък (* BUFF) възникна грешка: прочетете> вместо> 3

- Уверете се, че редакторът е поставен, както е обяснено от Xavier на 28 март.
Поставете K7 "Факто"

От ЧЕТЕ направете:

1 3 КАЧЕТЕ ФАКТО

след това първи тест от 10 FACS

Re: Дискусия за четвъртия език

Съобщение от __сат__ »30 март 2013 г. 12:29

Малки обяснения на основните зъби. Те изглеждат сложни, но всъщност са много прости. Процедурите за изчисляване на времето или показване на резултата са "изкривени". Самите алгоритми се свеждат до добавяне на големи числа с носене (което отнема само един цикъл "за"), комбинирано с умножение (или деление) на голям брой с малък брой, което също се прави от обикновен цикъл for.

Трикът да разберете тези алго и да разберете това понятие за голям брой. Големите числа са като нашите малки числа, но вместо да бъдат записани в основа 10, те са в голяма база (за простота ще вземем 10 000). Всяко число в база 10000 заема място на масив. Така че кутия в масив всъщност представлява 4 цифри от големия ми брой. Масив с размер 1000 отнема около 2kb RAM и ще може да съдържа 1000 * 4 = 4000 десетични цифри. Виждаме, че с 32k достъпен овен можем да имаме много големи числа, които да имат много големи цифри. (Sasfépu са способни на много повече, отколкото си мислим, когато им се дадат правилните алгоритми). За алгоритмите за събиране/изваждане на големи числа правим така, както преподаваме в малкия клас с таблиците за събиране и разпространението на пренасяне.

  • REM (1) в допълнение/изваждане пренасянето е +1 или -1, достатъчно е просто цяло число
  • REM (2) от ниско до високо тегло
  • REM (3) добавяне на две големи цифри
  • REM (4) Горният тест може да се направи аритметично:
  • REM (1) Моля, обърнете внимание, приспадането може да достигне до BASE-1
  • REM (2) от ниско до високо тегло
  • REM (3) Пазете се от преливане. Продуктът може да достигне BASE * D. Трябва да намерите тип данни за ACCU, който може да ги съдържа без загуба. Тук взех дубъл.
(разделението е подобно, освен че трябва да започнете с най-значимото тегло и изчисляването на пренасяне/изваждане е малко по-различно)
Факторното изчисление F (F [РЕДАКТИРАНЕ] Програмата, която Доминик току-що публикува, прави точно това с няколко подробности: Тя работи на база 100 с големи цифри, съхранявани в байтове. Това е може би най-добрият избор за четвърти, който работи естествено в 16 бита. Така че не може да се очаква преливане при умноженията.
___
(*), но не е много трудно да се приложи четвърта рутина, която изчислява mul16 * mul16 с 32-битов резултат.

Re: Дискусия за четвъртия език

Съобщение от Даниел »02 април 2013 17:53

Re: Дискусия за четвъртия език

Съобщение от Ксавие31 »03 април 2013 00:22

@Domi: страхотно, благодаря! Ще пренапиша вашата програма на ръка (не е твърде дълга), за да
запознат с редактора. Как да покажете просто изчисление 250 * 3000 в Forth ?

@_Sam_: благодаря за обясненията: Имам добра команда на Basic, ще се опитам добре
разберете вашите програми, за да ги адаптирате във Форт, според моя ритъм.

@Daniel: Вярно е, че тази дискусия показва по-малко известен аспект на sasfepu. Би било
чудесно е да видите вашите програми, ако ги намерите.

Re: Дискусия за четвъртия език

Съобщение от Доминика »03 април 2013 01:26

За да отговорите бързо на въпроса си, отговорът е

Страница 7 от Forth, ще видите, че U * извършва умножението на два неподписани сингъла (16 бита), давайки в стека резултата двойна точност на 32 бита.

За да отпечатаме 32-битова стойност (следователно два етапа от стека с данни), трябва да използваме командата D (докато простата .