Compararea şirurilor versus compararea numerelor

79

            Fie exemplu următor

$result = "123" < "45";
$result = "123" lt "45";

             În prima situaţie şirurile sunt convertite în întregi şi expresia va returna o valoare falsă, în timp ce în situaţia a doua expresia va fi adevărată deoarece şirul “45” apare în ordine alfabetică după şirul “123”.

Numerele reale şi comparaţia

            Programul următor (tst6.pl)

#!/usr/local/bin/perl 
$value1 = 14.3; 
$value2 = 100 + 14.3 - 100; 
if ($value1 == $value2) { 
     print("value 1 equals value 2\n");
} else {
     print("value 1 does not equal value 2\n");
}

returnează la consolă

 value 1 =14.3 does not equal value 2=14.3

            Acest rezultat poate părea paradoxal la prima vedere, el însă evidentiază o trăsătură specifică oricăror prelucrări numerice, indiferent de limbaj. Să modificăm puţin programul adăugând înainte de comparaţie linia

print("14.3 - value 1 is ",14.3-$value1," while 14.3 - value2 is ",14.3-$value2,"\n");

care returnează la consolă

14.3 - value 1 is 0 while 14.3 - value2 is 3.5527136788005e-15
value 1 =14.3 does not equal value 2=14.3

            Calculul numeric efectuat cu Perl (ca de altfel cu orice alt limbaj), este efectuat cu erori. În cazul de faţă, $value2 fiind mai mic decât 14.3 cu 3.5527136788005e-15.

© Cornel Mironel Niculae, 2003-2004

13-Nov-2009