Solo por curiosidad,
Luego de la pregunta sobre si es cero hay una salida del procedimiento.
¿cómo se maneja el bit de signo para el cero?. ¿es impredecible y por eso la consulta por si es cero va al principio?
Según la norme IEEE el cero es un caso especial. Y tiene dos posibles valores: +0.0 y -0.0, que para la norma tiene un valor a nivel de bits conocido. Y como dice el compañero Escafandra, hay que tener cuidado si hay que leerlo según si es 32bits o 64bits.
Si tienes activada la palabra de control para detectar el caso puedes capturar e identificar que zero se ha dado. Por lo general los compiladores por defecto detectan el cero indistintamente y lo asumen como positivo y en la mayoría de los casos no hace falta evaluar esto. En la mayoría de los casos basta con emplear la función IsZero() que viene en la unidad Math que se encarga de aplicar un valor Absoluto y de esa forma el -0.0 se transforma en 0.0. Opcionalmente IsZero() puede recibir el valor de tolerancia en error absoluto para considerar cuando un número sea cero. Por defecto es 1E-12 para el tipo double, 1E-4 para single y para extended 1E-16:
function IsZero(const A: Double; Epsilon: Double): Boolean;
begin
if (Epsilon=0) then
Epsilon:=DZeroResolution;
Result:=Abs(A)<=Epsilon;
end;
Como puedes ver en el código no hace las cosas a bajo nivel. De esta forma evita lidiar con los problemas de arquitectura y deja que la magia del compilador haga el trabajo de interpretar el valor.
El sitio de Efg tiene un buen material para entender todo sobre los números especiales en Delphi. No tiene desperdicio.
Saludos,