momente şi schiţe de informatică şi matematică
To attain knowledge, write. To attain wisdom, rewrite.

O aplicaţie pentru browser, cu determinanţi şi sisteme liniare

CSS | HTML | javaScript | lipsa de idei | modelare obiectuală
2007 nov

O mică aplicaţie pentru calculul determinanţilor şi pentru rezolvarea sistemelor de ecuaţii liniare;
totodată, o mare semnalare: sindromul lipsă de idei (sau, criza de idei).

Am întâlnit elevi pasionaţi de informatică, dar care nu învaţă decât la "Informatică". Mai bine zis, deşi sunt pasionaţi de informatică, nu învaţă decât "la Informatică". Abandonarea efortului de cunoaştere propus în Liceu pentru diversele discipline, poate avea drept rezultat firesc lipsa de idei.

La nivel de individ, lipsa de idei decurge din îngustimea domeniului de interes şi din necorelare…
Dar "lipsa de idei" este mai ales o stare comună, specifică sistemelor închise (care nu mai pot oferi perspective reale de dezvoltare) şi nu se poate să nu fie remarcată.

Distribuirea calculului factorialului: CGI şi Javascript

CGI | assembler | factorial | forma binară | forma zecimală | javaScript
2007 nov

Anterior (a vedea "Hello World!" şi Subrutină performantă pentru calculul factorialelor) am realizat o subrutină în limbaj de asamblare pentru n!. Într-o primă etapă, factorialul se obţine în forma binară (în baza 2^32); în a doua etapă, se converteşte la baza 10^9 şi implicit la forma zecimală uzuală. Forma binară se obţine în 0-5 secunde (n <= 100000); însă conversia la forma zecimală durează cam de cinci ori mai mult.

Este posibilă optimizarea secvenţei de conversie… dar de ce să se ocupe serverul de conversie? (şi nu browserul). Serverul trebuie să returneze rezultatul - punct! Iar rezultatul este în cazul de faţă o valoare numerică brută, în formă binară (cel mult, hexazecimală). Cel care l-a cerut (nu serverul), trebuie să ştie ce vrea să facă cu rezultatul obţinut - să-l afişeze treaba lui cum, sau să-l utilizeze ca atare (ca valoare numerică) în calcule proprii ulterioare.

Cererea http://<HOST>/cgi-bin/amifac.cgi?1234 primeşte de la server factorialul numărului 1234, în hexazecimal. Aplicaţia rezultată este pusă la dispoziţie prin Factoriale; interfaţa conţine şi o funcţie javascript de conversie la baza 10 a unui şir de cifre hexazecimale de orice lungime (folosind schema lui Horner).

Substratul problemei ("inside-out")

ecuația de gradul III | numere complexe | raport anarmonic
2007 nov

Atitudinea funcţionărească şi atitudinea creatoare, faţă de "probleme".
A ignora legăturile posibile înseamnă a scăpa şansa de "a reinventa roata", adică şansa de a învăţa regândind lucrurile.

Ecuaţia µ2 - µ + 1 = 0 provine din (abcd) = (acdb) sau (abcd) = (adbc); deci un raport este echianarmonic dacă şi numai dacă el se păstrează în urma unei permutări circulare între trei numere... coeficienţii sunt funcţii simetrice de a, b, c - deci se vor putea exprima prin coeficienţii ecuaţiei de gradul trei care are ca rădăcini numerele a, b, c; regăsim pe această cale elementară - "reinventând roata", aşa-i? - condiţia în care o ecuaţie de gradul trei are rădăcini reale (o teoremă a lui Joachimsthal) şi restabilim o metodă (dată de Cayley) de rezolvare a ecuaţiilor de gradul trei.

Subrutină performantă pentru calculul factorialului

factorial
2007 oct

Optimizări (faţă de programul în limbaj de asamblare pentru n!, realizat în "Hello World!") asupra algoritmului, asupra conversiei (baza 109) şi asupra folosirii instrucţiunii de împărţire DIV.

Se înlocuieşte înmulţirea cu fiecare factor, prin înmulţire cu produs de factori, iar operaţiile sunt modelate acum în baza 232 (în loc de modelul iniţial, bazat pe reprezentarea în baza 216). Conversia la forma zecimală este realizată acum prin intermediul bazei 109 (numerele 0..109-1 - "încap" pe 32 biţi), în loc de 104, din varianta precedentă.

Instrucţiunea microprocesorului DIV necesită cel puţin 16/24/40 tacţi pe I80486 şi 17/25/41 tacţi pe Pentium, după cum împărţitorul are 8/16/32 biţi; se rescrie programul, înlocuind împărţirea la operand (cu DIV) prin înmulţirea cu inversul operandului (MUL fiind mai rapidă ca DIV).

"Hello World!"

30 de ani | GMP | GNU as | Linux | Math::BigInt | PHP | Python | assembler | int 0x80 | mmap() | perl
2007 sep

Formulăm în diverse limbaje, soluţionarea unei aceleiaşi probleme—calculul factorialului (recursiv). Vizăm aspecte de elaborare, aspectele algoritmice necesare şi corelaţii fireşti între limbaje.

Câte cifre are n!; aplicaţie (javascript + HTML) bazată pe logaritmi. Aplicaţie pentru compararea numărului de operaţii cifră-cu-cifră necesare calculului n! în baza 10, respectiv în baza 256.

n! în limbajele bc, PHP, Python; modelare OOP în javascript folosind baza 106; program perl folosind modulul Math::BigInt; modelare OOP în perl folosind baza 106; program C folosind biblioteca GMP; modelare OOP în C++ (GCC g++) folosind baza 216 (şi conversie la baza 104); program în limbaj de asamblare GNU as şi elemente de programare în limbaj de asamblare sub Linux (transmiterea parametrilor, funcţia mmap(), folosirea apelurilor de sistem, instrucţiunea int 0x80; folosirea instrucţiunilor FPU; investigaţii asupra fişierului executabil).


Prev
Next
ALL (349 titluri)

vezi Cărţile mele (de programare)

despre acesta ~ Home
(sau https://vlad.bazon.net/

Factoriale | Graficul funcţiilor

PGN browser | chess JS engine

Load

in /slightchess

/slightchess

626 partide analizate cu Crafty

(R) Computer Art | Decoraţiuni

Aplicaţii şcolare (javaScript)

Sinteze: