Discuție Forth Language - Pagina 3
Forum pentru colecționari și utilizatori de computere vechi

System.cfg Acces la baza de date
Discuție despre limba Forth
Re: Discuție despre limba Forth
Mesaj de Dominica »30 martie 2013 12:17 PM
iată programul Factorial, tradus pentru MO05
Acest program a fost publicat în revista FORTH DIMENSION, dar nu am putut găsi numele autorului
Să vedem detaliile:
1 - Unul dintre avantajele Forth este portabilitatea. Este mai ușor să traduci Forth
de la o mașină la alta decât Basic, de exemplu.
Trebuie totuși să fii atent:
a) Ricardo definește +! la început pentru că acest cuvânt nu există în vocabularul său. Pentru noi există, deci nu este nevoie.
b) Există DEFINE BYTE-ARRAY. Este unul dintre marile defecte ale lui Jupiter's Forth care a omis cuvântul
Din fericire aici traducerea este ușoară.
c) Cuvântul? DUP din Forth se numește -DUP. Dar este la fel (vezi pagina 4)
d) Cuvântul ASCII nu există în Forth. Deoarece este o chestiune de emisie, vom pune 44 direct (sau 46 pentru un punct).
e) În unele FORTHs THEN este înlocuit cu ENDIF.
f) În lista originală (* BUFF) a apărut o eroare: citiți> în loc de> 3
- Asigurați-vă că editorul a fost pus așa cum a explicat Xavier pe 28 martie.
Puneți K7 "Fakto"
De la FORTH, faceți:
1 3 CLOAD FACTO
apoi un prim test de 10 FACS
Re: Discuție despre limba Forth
Mesaj de __sat__ »30 martie 2013 12:29 PM
Explicații mici cu privire la programe de bază. Arată complicat, dar practic sunt foarte simple. Rutinele pentru calcularea timpului sau afișarea rezultatului sunt „răsucite”. Algoritmii înșiși se rezumă la adăugarea de numere mari cu carry (care necesită doar o singură buclă "pentru") combinată cu o înmulțire (sau divizare) a unui număr mare cu un număr mic, ceea ce se face și printr-o buclă simplă.
Trucul pentru a înțelege aceste alge și pentru a înțelege această noțiune de număr mare. Numerele mari sunt ca numerele noastre mici, dar în loc să fie scrise în baza 10, acestea se află într-o bază mare (să luăm 10.000 pentru simplitate). Fiecare număr din baza 10000 ocupă un loc al unei matrice. Deci, o cutie dintr-o matrice reprezintă de fapt 4 cifre din numărul meu mare. O matrice de dimensiunea 1000 ocupă aproximativ 2kb de ram și va putea conține 1000 * 4 = 4000 cifre zecimale. Vedem că, cu 32k de ram accesibil, am putea avea o mulțime de numere mari având ele însele o mulțime de cifre mari. (Sasfepu sunt capabili de mult mai mult decât credem atunci când li se oferă algoritmii corecți). Pentru algoritmii de adunare/scădere de numere mari, facem așa cum predăm în clasa mică cu tabelele de adunare și propagarea carry.
- REM (1) în plus/scăderea transportului este +1 sau -1, este suficient un întreg întreg
- REM (2) de la greutate mică la mare
- REM (3) adăugarea a două cifre mari
- REM (4) Testul de mai sus poate fi realizat aritmetic:
- REM (1) Rețineți, deducerea poate merge până la BAZA-1
- REM (2) de la greutate mică la mare
- REM (3) Feriți-vă de revărsări. Produsul poate ajunge la BASE * D. Trebuie să găsiți un tip de date pentru ACCU care să le poată conține fără pierderi. Aici am luat o dublă.
Calculul factorial F (F [EDIT] Programul pe care Dominique tocmai l-a postat face exact asta cu câteva detalii: funcționează la baza 100 cu cifre mari stocate în octeți. Aceasta este probabil cea mai bună alegere pentru cei care lucrează nativ în 16 biți. Deci, nu este de așteptat nici o revărsare în multiplicări.
___
(*) dar nu este foarte dificil să implementați o a patra rutină care calculează mul16 * mul16 cu rezultat pe 32 de biți.
Re: Discuție despre limba Forth
Mesaj de Daniel »02 Apr 2013 17:53
Re: Discuție despre limba Forth
Mesaj de Xavier31 »03 apr 2013 00:22
@Domi: grozav, mulțumesc! Voi retipa programul dvs. manual (nu este prea lung), pentru a
familiarizat cu editorul. Cum se afișează un calcul simplu de 250 * 3000 în Forth ?
@_Sam_: vă mulțumesc pentru explicații: Am o bună cunoaștere a Basic, voi încerca bine
înțelege programele tale pentru a le adapta în Forth, la ritmul meu.
@Daniel: Este adevărat că această discuție arată un aspect mai puțin cunoscut al sasfepu. Ar fi
minunat să vă văd programele dacă le găsiți.
Re: Discuție despre limba Forth
Mesaj de Dominica »03 apr 2013 01:26
Pentru a răspunde rapid la întrebarea dvs., răspunsul este
Pagina 7 din Forth, veți vedea că U * efectuează înmulțirea a două singuri nesemnate (16 biți) dând în stivă rezultatul unei precizii duble pe 32 de biți.
Pentru a imprima o valoare pe 32 de biți (deci două etape ale stivei de date), trebuie să folosim comanda D (în timp ce simpla .