Dacă v-a trecut vreodată prin minte să folosiţi PHP-ul ca să simulaţi nişte reacţii nucleare, să calculaţi ecuaţia lui Drake, să calculaţi o limită când n tinde spre infinit sau (de ce nu?) să codaţi o parte a unei aplicaţii de telefonie VoIP
vă sugerez să faceţi un duş rece, să vă daţi două palme zdravene (sau să rugaţi pe cineva să vi le dea) şi, evident, să vă mai gândiţi înca o dată.
Am să fac o mică paranteză pentru a aminti de o foarte amuzantă paralelă facută între mai multe “limbaje de programare” şi o serie de “ambarcaţiuni”. Articolul se intitulează “If a programming language was a boat…” si poate fi accesat aici.
Un mic “experiment” de acum câteva zile m-a făcut să înţeleg ŞI mai bine ce l-a determinat pe autorul articolului respectiv să facă acea asociere a PHP-ului cu o plută de bambus.
Priviţi şi vă amuzaţi!
$var = (int) ((0.1 + 0.7) * 10)
echo $var; // 7
$var = 20.1 * 10;
var_dump($var); // float(201)
var_dump(floor($var)); // float(200)
$var = (0.30 - 0.25) * 100;
var_dump($var); // float(5)
for ($i = 1; $i <= $var; $i++) {
echo $i;
}
// 1234
« Hello World! Pocăiţi »

În php (5.3.1 – cel puțin… și probabil în sus)… nu se mai întâmplă asta.
…dar asta tot nu înseamnă că poți face simulări de reacţii nucleare…
Nu se întamplă doar în php. Și în python am avut probleme cu virgula mobilă.
Trebuia să demonstrez că media și dispersia tind către valorile teoretice cand n tinde la infinit (pentru niște algoritmi de simulare a unor numere aleatoare cu diverse reparții). Din păcate, cu toate că algoritmii erau buni nu reușeam și pace. Din fericire, am descoperit și de ce:
http://docs.python.org/tutorial/floatingpoint.html