2011-06-25 20 views
26

Por ejemplo, en:¿Por qué double.Parse ignora el signo de cero?

bool eq = (1/double.Parse("-0.0")) == (1/-0.0); 

eq habrá false.

double.Parse tendrían que pasar por algunos problemas para ignorar explícitamente el signo de cero, aunque no hacerlo casi nunca resulta en un problema. Como necesito la representación en bruto, tuve que escribir mi propia función de análisis que tiene cero casos especiales y usa double.Parse para todo lo demás.

Eso no es un gran problema, pero realmente me pregunto por qué tomaron la decisión de ignorar el signo de cero, porque me parece que no hacerlo no sería algo malo.

+0

¿Por qué necesitarías el signo del cero? IEEE 754 afirma que '+0 == -0' después de todo. –

+0

¿Cómo su ejemplo de código no arroja una excepción DivideByZeroException? – FishBasketGordo

+0

@Donal: porque necesito la representación raw en bytes, y es diferente. @ FishBasketGordo: porque la división por cero en el punto flotante IEEE 754 es legal y está bien definida. – harold

Respuesta

2

No sé acerca de la razón por la per se, sino una posible solución: Si ve un carácter - al principio, analizar el resto de la cadena y luego negarlo.

+0

Claro que funciona, intente cambiar '(1/-0.0)' a '(1/0.0)' - el resultado será 'verdadero' ¿Está pensando en NaN? – harold

+0

@harold: raro, no, pensé que tampoco funcionaba para el infinito. (No tiene sentido que lo haga). Pero sí, tienes razón, gracias. – Mehrdad

+0

+ ∞ no es igual a -∞ en ninguna interpretación moderna de las matemáticas ... –

-3

No es la diferencia:

  1. double.Parse ("- 0,0") = 0, 1/0 -> INF

  2. 1/-0,0 -> -INF

Pero el operador menos en la declaración 2 no significa "-0.0".

Cuestiones relacionadas