seoane |
29-05-2006 23:15:48 |
Sin ir mas lejos y siguiendo con el tema del hilo, Delphi usa la siguiente funcion para comprobar el signo de un double.
Código Delphi [-]
function Sign(const AValue: Double): TValueSign;
begin
if ((PInt64(@AValue)^ and $7FFFFFFFFFFFFFFF) = $0000000000000000) then
Result := ZeroValue
else if ((PInt64(@AValue)^ and $8000000000000000) = $8000000000000000) then
Result := NegativeValue
else
Result := PositiveValue;
end;
En el primer if comprueba si el valor es 0 eliminando primero el bit de signo, de esta manera 0.0 y -0.0 son considerados como un mismo numero.
Sin embargo, estuve haciendo pruebas y parece que delphi ya tiene en cuenta esta eventualidad a la hora de hacer comparaciones. Por ejmplo:
Código Delphi [-]
var
d1, d2: double;
begin
d1:= -0.0;
d2:= 0.0;
ShowMessage('(d1 = d2) = ' + BoolToStr(d1 = d2,TRUE));
ShowMessage('(d1 = d2) = ' + BoolToStr(Comparemem(@d1,@d2,Sizeof(double)),TRUE));
end;
Vaya forma de darle vueltas al asunto :D
|