¿Por qué Gnu Octave tiene ceros negativos?


Esta es una extraña que me desconcierta. Recientemente noté que en el indicador de Octave de Gnu, es posible ingresar ceros negativos, así:

octave:2> abomination = -0

Y también lo recuerda:

octave:3> abomination
abomination = -0

En el interés de la cordura, cero negativo es igual a cero regular. Pero también me di cuenta de que el signo tiene algunos otros efectos. Como estos:

octave:6> 4 * 0
ans = 0
octave:7> 4 * -0
ans = -0
octave:8> 4 / 0
warning: division by zero
ans = Inf
octave:9> 4 / -0
warning: division by zero
ans = -Inf

Como se puede ver, el signo se conserva a través de ciertas operaciones. Pero mi pregunta es por qué. Esto parece una desviación radical de matemáticas estándar, donde cero es esencialmente sin signo. ¿Hay algunas propiedades matemáticas atractivas para tener esto? ¿Importa esto en ciertos campos de las matemáticas?

FYI: Matlab, que octava se modela después, no tiene ceros negativos. Cualquier intento de usarlos se trata como ceros regulares.

EDITAR: Matlab tiene ceros negativos, pero no se muestran en la salida predeterminada.

Author: Stephen Canon, 2010-01-21

3 answers

El cero firmado es parte de los formatos IEEE-754, y su semántica está completamente especificada por esos formatos. Resultan ser muy útiles, especialmente cuando se trata de cortes de ramas complejas y transformaciones del plano complejo (ver muchos de los escritos de W. Kahan sobre el tema para más detalles, como el clásico "Cortes de ramas para Funciones Elementales Complejas, o Mucho Ruido y pocas nueces").

Versión corta: cero negativo es a menudo una buena cosa para tener en numérica los cálculos y los programas que tratan de proteger a los usuarios de encontrarse con ella a menudo les están haciendo un flaco favor. FWIW, MATLAB parece usar cero negativo también, pero como imprime números usando la rutina printf del host, muestran lo mismo que cero positivo en Windows.

Consulte esta discusión en los foros de MATLAB para obtener más detalles sobre el cero firmado en MATLAB.

 30
Author: Stephen Canon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-21 14:33:47

Los números de coma flotante IEEE-754 también tienen esta propiedad. Podría ser útil para límites e infinitos. Por ejemplo, el límite de 1 / xcon x → + ∞ es 0, pero la función se acerca desde el lado positivo del eje, con x → - ∞ la función se acerca desde el lado negativo, por lo que uno podría dar el límite como -0, en ese caso.

 9
Author: Joey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-21 14:11:06

Signed Zero

Cero firmado se hace eco de la matemática concepto de análisis de acercarse a 0 desde debajo como un límite unilateral, que puede se denota por x → 0-x → 0-, o x → ↑0. Se puede utilizar la notación "-0" informalmente para denotar un número negativo eso se ha redondeado a cero. El concepto de cero negativo también tiene algunos aplicaciones teóricas en mecánica estadística y otros disciplina.

 7
Author: nos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-21 14:14:39