2010-01-21 25 views
24

Esta es una extraña que me deja perpleja. Hace poco me di cuenta en el indicador de GNU Octave, es posible entrar en ceros negativos, así:¿Por qué Gnu Octave tiene ceros negativos?

octave:2> abomination = -0 

Y recuerda, también:

octave:3> abomination 
abomination = -0 

En aras de la cordura, hace el cero negativo igual a cero regular. Pero también noté que el signo tiene 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 letrero se conserva mediante ciertas operaciones. Pero mi pregunta es por qué. Esto parece una desviación radical de las matemáticas estándar, donde cero es esencialmente sin signo. ¿Hay algunas propiedades matemáticas atractivas para tener esto? ¿Esto es importante en ciertos campos de las matemáticas?

FYI: Matlab, cuya 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.

+3

FYI: Octave no está de ninguna manera "basado en" Matlab. Octave está modelado según Matlab y diseñado para resolver los mismos problemas, pero definitivamente no se basa en Matlab. –

+4

"matemáticas estándar" y aritmética de punto flotante son dos conceptos radicalmente diferentes. – ndim

+1

@Joachim. Lo arreglé, gracias. – BigBeagle

Respuesta

30

Los cero firmados son parte de los formatos IEEE-754, y su semántica está completamente especificada por esos formatos. Resultan bastante ú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 "Corte de ramas para funciones elementales complejas", o mucho Ado sobre Nothing's Sign Bit ").

Versión corta: el cero negativo suele ser una buena cosa para tener en cuenta en los cálculos numéricos, y los programas que intentan evitar que los usuarios lo encuentren a menudo les hacen 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 this discussion en los foros de MATLAB para obtener más información sobre el cero firmado en MATLAB.

+0

Gracias por la captura de Matlab. Agregué una nota a la pregunta. – BigBeagle

9

Los números de punto flotante IEEE-754 tienen esta propiedad también. Puede ser útil para los límites y las infinidades. Por ejemplo, el límite de 1/x con 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 Así, uno podría dé el límite como − 0, en ese caso.

+1

Sí, en algunas matemáticas es importante hacer una distinción entre -Inf y + Inf como el log (0) = - Inf – petantik

+1

Bueno, los infinitos siempre tienen un signo. Ese no era mi punto de todos modos. – Joey

7

Signed Zero

Firmado cero hace eco de la matemática concepto análisis de acercarse a 0 de a continuación como un límite unilateral, que puede ser denotada por x → 0-, x → 0-, o x → ↑ 0. La notación "-0" puede usarse informalmente para denotar un número negativo que se ha redondeado a cero. El concepto de cero negativo también tiene algunas aplicaciones teóricas en mecánica estadística y otras disciplinas .

+0

Hmm, no estoy seguro de qué se puede hacer, pero se perdió algo de formato en la parte de notación, por lo que ahora las dos primeras piezas parecen idénticas. – BigBeagle

Cuestiones relacionadas