Ver Mensaje Individual
  #9  
Antiguo 29-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 26
seoane Va por buen camino
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;
  // Esto nos dice d1 es igual a d2
  ShowMessage('(d1 = d2) = ' + BoolToStr(d1 = d2,TRUE));
  // Sin embargo si comparamos bit a bit nos dice que no es asi
  ShowMessage('(d1 = d2) = ' + BoolToStr(Comparemem(@d1,@d2,Sizeof(double)),TRUE));
end;

Vaya forma de darle vueltas al asunto
Responder Con Cita