El cero negativo (-0) sí existe, lo siento mucho

-0

-0

Es curioso que en nuestro mundo cuadriculado de aritmética ordinaria, el cero (0) es cero y punto pelota. No tiene sentido un valor de nada con un signo, porque nada es eso, absolutamente nada. Sin embargo, en el mundo del desarrollo informático, y también de algunas ciencias experimentales (y de determinadas aplicaciones teóricas en la física estadística y otras disciplinas), algunas representaciones numéricas permiten la existencia de un cero negativo (-0), distinguiéndolo a la perfección del cero positivo (+0) y considerándolos dos valores diferentes. El concepto de cero con signo es contrario a la suposición general de la mayoría de los campos de matemáticas de que el cero negativo es lo mismo que cero.

El estándar de la IEEE para aritmética en coma flotante (IEEE 754) es el más extendido para las operaciones en doble precisión o punto flotante (un método de representación de números reales). Este estándar define formatos para la representación de números en coma flotante (incluyendo el cero) y valores no normalizados, así como valores especiales como infinito y NaN (Not a Number), con un conjunto de operaciones que trabaja sobre dichos valores.

El IEEE 754, presente en la mayoría de los ordenadores y de los lenguajes de programación, define pues un -0 y un +0. Estos dos ceros pueden ser considerados como una variante del conjunto extendido R de los números reales, que añadía dos elementos nuevos al conjunto básico R de números reales, el +∞ y el −∞. El menos cero se basa en el concepto de análisis matemático de acercarse a 0 desde abajo como un límite y, asimismo, puede ser utilizado, de manera informal, para referirse a un número negativo que se ha redondeado a cero. En las propias especificaciones del estándar se afirma que este valor hace que sea mucho más sencillo conseguir una buena precisión numérica en determinados problemas críticos, sobre todo si se calculan mediante funciones complejas elementales.

Las representaciones que permiten un cero negativo pueden llegar a ser una fuente de errores en programas si los desarrolladores de software no se dan cuenta (u olvidan) que, si bien ambos ceros se comportan como iguales ante comparaciones numéricas, son diferentes patrones de bits y dan resultados diferentes en algunas operaciones, como por ejemplo la división.

Representación binaria de 32 bits del cero negativo

Representación binaria de 32 bits del cero negativo

Supongamos dos valores x e y, además de los dos ceros (positivo y negativo), los dos infinitos (positivo y negativo) y el anteriormente comentado valor NaN. En la siguiente tabla se muestran los distintos resultados que producirían las diferentes divisiones entre ellos (fila divido entre columna).

/

+y

-y

+0

-0

+∞

-∞

NaN

+x

+z
-z
+∞
-∞
+0
-0
NaN

-x

-z
+z
-∞
+∞
-0
+0
NaN

+0

+0
-0
NaN
NaN
+0
-0
NaN

-0

-0
+0
NaN
NaN
-0
+0
NaN

+∞

+∞
-∞
+∞
-∞
NaN
NaN
NaN

-∞

-∞
+∞
-∞
+∞
NaN
NaN
NaN

NaN

NaN
NaN
NaN
NaN
NaN
NaN
NaN

Vamos a ver un pequeño programa codificado en Java que demuestre algunos de los resultados anteriores. El tipo de datos float de Java tiene completamente integrado el estándar IEEE 754, por lo que no tendremos ningún problema para comprobar los cocientes.

Código   
class CeroNegativo
{
 public static void main (String[] args)
 {
  float x,y,resultado;
  
  //+x:+y=+z
  x=1;
  y=1;
  resultado=x/y;
  System.out.println(x + "/" + y + "=" + resultado);
    
  //-x:-0=-infinito
  x=-1;
  y=0;
  resultado=x/y;
  System.out.println(x + "/" + y + "=" + resultado);
  
  //+x:-infinito=-0
  x=1;
  y=-1/new Float(-0.00);
  resultado=x/y;
  System.out.println(x + "/" + y + "=" + resultado);
  
  //0:0=NaN
  x=0;
  y=0;
  resultado=x/y;
  System.out.println(x + "/" + y + "=" + resultado);
 }
} 

Si nos fijamos en el segundo ejemplo (//+x:-infinito=-0), vemos que, como se explicaba en la tabla, un número positivo (+x) dividido entre menos infinito (−∞) da como resultado menos cero (-0). Para conseguir el valor de −∞, lo que hacemos es generar una división intermedia (-1/-0) cuyo cociente sea −∞ (siempre según la tabla), para que después este resultado pase a ser denominador del quebrado principal.

Esto anterior es perfectamente correcto en Java, y el resultado en línea de comandos sería lo siguiente.

Resultado   
1.0/1.0=1.0
-1.0/0.0=-Infinity
1.0/-Infinity=-0.0
0.0/0.0=NaN

Otras operaciones aritméticas con -0 arrojan distintos resultados. La multiplicación, por ejemplo, sigue sus mismas reglas de combinación de signos, esto es -0 × -0 = +0, y la raíz cuadrada de -0 (√-0) es igual a -0. Veamos estos dos ejemplitos en código Java.

Código   
import java.lang.Math;
 
class CeroNegativo
{
 public static void main (String[] args)
 {
  float x,y,resultado;
    
  //(-0)+(-0)=-0 
  x=new Float(-0.00);
  y=new Float(-0.00);
  resultado=x+y;
  System.out.println(x + "+" + y + "=" + resultado);
  
  //SQRT(-0)=-0 
  x=new Float(-0.00);
  resultado=(float)Math.sqrt(x);
  System.out.println("La raíz cuadrada de " + x + " es " + resultado);
 }
}

Y el resultado en línea de comandos sería el que sigue.

Resultado   
-0.0+-0.0=-0.0
La raíz cuadrada de -0.0 es -0.0

Con respecto a las comparaciones, se pueden utilizar los operadores comparativos usuales de los diversos lenguajes de programación, aunque, para evitar algunos errores, muchos lenguajes traen comparadores propios para este fin. Es el caso del método equals de la clase Double de Java.

Y aparte de la fricada informática que supone, ¿para qué demonios nos puede servir este absurdo número? Pues bien, como comentábamos al principio, en algunos ámbitos se puede utilizar de manera más o menos formal para establecer valores muy determinados. Por ejemplo, la notación -0 puede ser usada para indicar que se redondeó a cero un número negativo muy cercano a él. Esto puede ser útil cuando un signo negativo es significativo, por ejemplo en la tabulación de temperaturas en grados Celsius, donde un signo negativo significa algo muy preciso (temperaturas bajo cero). En este caso querría decir que la temperatura es algo inferior a cero, pero por próxima se redondeó.

Otro caso práctico sería el de la física estadística, en la que, a veces, se usan temperaturas negativas para describir sistemas con una inversión de población, que se puede considerar que tienen una temperatura mayor que el infinito positivo. En este contexto, una temperatura de cero negativo es una temperatura (teórica) más grande que cualquier otra temperatura negativa, correspondiente al máximo concebible de inversión de población.

En fin, que prácticamente el cero negativo es como un puñetero cero a la izquierda, o sea que no se utiliza para nada. Pero la próxima vez que algún matemático te diga que el -0 no existe, imprímele este post y explícale cómo los informáticos, a veces, tenemos ases en la manga que otros no tienen. Ajo y agua; lo siento mucho.

12 comentarios a “El cero negativo (-0) sí existe, lo siento mucho”

  • CoNDoR:

    La próxima vez que algún matemático te diga que el -0 no existe, les das la puta razón y le explicas que como en informática no tenemos un tipo de dato estandar con precisión infinita tenemos que lidiar con su puta existencia.
    En esto, como en muchas otras cosas, hay que reconocer que la limitación está en la aproximación informática al problema y no en la matemática.

    No hay que cambiar el mundo cuando el modelo no encaja, hay que cambiar el modelo (o lidiar con su impresición).

  • J-888:

    A los que creemos que el numero -0 existe nos discriminan e ignoran. Luchemos por su aceptación

  • JC:

    Si bien -0 y 0 son considerados dos valores diferentes, se tiene la problemática de que ¿como comparas que cero viene?, si se hace la seguiente comparación if(-0 == 0 ) dará verdadero, entonces programáticamente como se puede saber si viene o no viene negativo !!! :S

  • José Daniel:

    Niños, nadie dijo que SU -0 no existe, pero el -0 en el campo de los reales es igual al cero positivo, y sea cual sea su signo, segun las leyes de adicion por ser un grupo abeliano no tiene ninguna importancia, lo que ustedes argumentan es que el “-0” en informatica si existe, sinembargo … NADIE DIJO QUE NO, tampoco NADIE DIJO QUE EL SIMBOLO “-0” en el campo de los REALES representa lo mismo que “-0” em informatica.

    Fail !

  • RC:

    Vaya. Como siempre inventando la sopa de ajo ( o la bullabesa, me da igual). Hace mucho tiempo que en Matemática se usa la notación –> c+0 o –> c-0 para indicar los límites por la derecha y por la izquierda (en el caso c=0 queda –> +0 o –> -0), que es la idea básica del asunto (aquí diría yo trasunto).
    Lo importante es la CIENCIA y no la lucha ridícula entre científicos sean matemáticos, físicos, ingenieros, …ESTO NO ES THE BIG BANG THEORY.
    Y si es por meter entropía en el sistema, cito a un viejo catedrático ya fallecido “La Ciencia o es Física o colección de sellos” y cuando en la Ciencia se hace Ciencia se usa su único lenguaje las Matemáticas.

    Buen 3 X 11 X 61

    RC

  • ET:

    Esto es lo que le contesté a un amigo, por si os puede servir.

    “Es gracioso, pero es una cuestión de lenguaje, no de concepto. El 0 negativo no tiene sentido, pero su símbolo en informática sí. La cuestión es más profunda de lo que parece, filosóficamente hablando. Tampoco en Matemáticas el infinito existe como número real, es una tendencia. Salvo para Cantor y sus números transfinitos. Sin embargo los informáticos los tratáis como si lo fuesen. La tabla de las divisiones con infinitos y ceros y NaN (indeterminaciones) es muy convincente. Es lo que yo les explico a mis alumnos cuando hacemos límites, salvo que las indeterminaciones las resolvemos. Te aseguro que en el cálculo de límites el cero negativo tiene sentido. Por eso no entiendo que poco después diga que la raíz cuadrada, precisamente cuadrada, del cero negativo sea el cero negativo. Todos sabemos que un número negativo al cuadrado da positivo. Así que la raíz cuadrada del cero negativo debería dar NaN (no es un número real) o bien el cero complejo (0i). Así que además del cero negativo, tenemos el cero complejo, el positivo y el negativo, -0i y 0i.”

    ET

  • EF:

    Me parece muy bueno el comentario de ET. Yo pienso exactamente lo mismo. Solo quiero agregar, que no veo lógico que -0/-OO ó +0/-OO ó -0/+OO ó +0/+OO, dé un valor determinado en la tabla. Está muy bien que ET no haga caso a este tipo de división, ya que es una indeterminación y debe resolverse como tal. Esto es porque en el límite, cuando existe una indeterminación como las que indiqué, hay que verificar quién tiende más rápidamente al valor (si el numerador o el denominador). Este bug debería arreglarse en el lenguaje Java y todos los demás lenguajes que lo implementen.

    EF.

  • demonioazteka:

    muy buen articulo, realmente el -0 en el mundo no informático si existe, ya que -1*0= -0 por ejemplo, y esto es por el formulado de los simbolos, el -0 planteado en este articulo es debido a la técnica binaria para el procesamiento de datos, es decir ese -0 realmente es un numero desbordado por eso el computador no lo interpreta como zero porque no es y no activo la bandera de zero, si no la de desborde. los lenguajes de alto nivel se ven imposibilitados en su mayoria de controlar este tipo de eventos, debido a que es necesario la lectura de los flags del procesador para identificar dicho valor, o bien neutralizarlo con el absoluto; sin embargo ese -0 realmente no es un cero es un numero infinitamente cercano a cero pero sin serlo. por lo que saltar dicho error crearía un acarreo de error que se debe cuantificar para la correcta representación del resultado

  • Chacon:

    He “aterrizado” en esta web por casualidad y coincidiendo con un período de mi vida de “reflexiones fundamentales”, no me he resistido a exponer pensamientos que tuve años ha referentes al 0+ y 0-…
    Soy Físico, 63 años, ya retirado pero con demasiadas inquietudes como para no estar al corriente de lo que pasa en el CERN que sigo con detalle…
    Todo lo que voy viendo corrobora la “visión” que tuve en mi día de estudiante en la UNI de que la estructura de la materia debería analizarse desde el punto de vista de -0 y +0 puesto que el CERO es lo único que participa en todo!! (Materia, física, religión, vida…)
    Se van descubriendo de más en más partículas subatómicas que en su día fueron “previstas”… Es mas fácil analizar que la estructura de la materia es una serie infinita tanto para arriba como para abajo… (de átomos a galaxias y más y de átomos a partículas x y más…)

  • […] ¿Significa toda esta lógica que es necesaria la maldad del mundo para que haya un nivel mínimo de empatía y a su vez haya menos mal que si no lo hubiese? Es como el universo en el budismo y el taoísmo… ¿Es necesario que exista algo para que pueda no existir? El universo existe porque no existía y por tanto tenía que existir para poder no existir. Ya que la carencia de existencia es un hueco vacío que debe rellenarse con algo, la existencia. No es 0 y 1. Es -0 y 0. […]

  • Ricardo:

    Me parece divertida la chachara que tienen sobre el -0. solo 2 observaciones:
    1) El 0 es una definición de nada, nulo o sin valor.
    2) Tambien por definición matemática, está incluido en el conjunto de los valores positivos.

    Por ultimo, como bien dice condor:

    En esto, como en muchas otras cosas, hay que reconocer que la limitación está en la aproximación informática al problema y no en la matemática.

    Si nos dimos tiempo de leer y reflexionar el articulo, podemos ver que la existencia del -0 en informatica SE DA POR DEFECTO, ya que se utiliza el último bit para representar el signo de un numero negativo.
    Apesar de eso, se ha cubierto informaticamente que 0 = -0. Alguien en algun lugar de la gerga informática ha definido que 0 = -0, para empatar con los teoremas matematicos (lease IEEE 754).

    como vemos,
    1) El 0 matematico son convenciones.
    2) El 0 informatico son representaciones.

    Lo cierto es que -0 no existe en la recta.

Escribe tu comentario

eBook ‘retroPLOF!’

retroPLOF!

Especifica tu dirección de correo electrónico y pulsa 'Comprar ahora'. Puedes pagar con tu cuenta de PayPal o con cualquier tarjeta bancaria.

E-mail envío eBook:

Sigue teknoPLOF! vía…
 
RSS
Twitter
Facebook
Google
 
Ready Set Click!

Utilizamos cookies propias y de terceros para mejorar la experiencia de navegación. Más información.

ACEPTAR
Aviso de cookies