El cero con signo es cero con un signo asociado . En aritmética ordinaria, el número 0 no tiene signo, por lo que −0, +0 y 0 son equivalentes. Sin embargo, en informática , algunas representaciones numéricas permiten la existencia de dos ceros, a menudo denotados por −0 ( cero negativo ) y +0 ( cero positivo ), considerados iguales por las operaciones de comparación numérica pero con posibles comportamientos diferentes en operaciones particulares. Esto ocurre en las representaciones numéricas con signo de magnitud de signo y complemento a uno para números enteros, y en la mayoría de las representaciones numéricas de punto flotante . El número 0 generalmente se codifica como +0, pero aún puede representarse por +0, −0 o 0.
El estándar IEEE 754 para aritmética de punto flotante (que actualmente utilizan la mayoría de las computadoras y lenguajes de programación que admiten números de punto flotante) requiere tanto +0 como −0. La aritmética real con ceros con signo puede considerarse una variante de la línea de números reales extendida , de modo que 1/−0 = −∞ y 1/+0 = +∞; la división no está definida solo para ±0/±0 y ±∞/±∞.
El cero con signo negativo refleja el concepto de análisis matemático de acercarse a 0 desde abajo como un límite unilateral , que puede denotarse 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 la mecánica estadística y otras disciplinas.
Se afirma que la inclusión del cero con signo en IEEE 754 hace que sea mucho más fácil lograr precisión numérica en algunos problemas críticos, [1] en particular cuando se calcula con funciones elementales complejas . [2] Por otro lado, el concepto de cero con signo es contrario a la suposición habitual que se hace en matemáticas de que cero negativo es el mismo valor que cero. Las representaciones que permiten cero negativo pueden ser una fuente de errores en los programas, si los desarrolladores de software no tienen en cuenta que, si bien las dos representaciones del cero se comportan como iguales en comparaciones numéricas, arrojan resultados diferentes en algunas operaciones.
Los formatos de números enteros binarios pueden utilizar varias codificaciones . En la codificación de complemento a dos , ampliamente utilizada , el cero no tiene signo. En una representación de signo y magnitud de 1+7 bits para números enteros, el cero negativo se representa con la cadena de bits 1000 0000. En una representación de complemento a uno de 8 bits , el cero negativo se representa con la cadena de bits 1111 1111. En todas estas tres codificaciones, el cero positivo o sin signo se representa con 0000 0000. Sin embargo, las dos últimas codificaciones (con un cero con signo) son poco comunes para los formatos de números enteros. Los formatos más comunes con un cero con signo son los formatos de punto flotante ( formatos IEEE 754 o similares), que se describen a continuación.
En los formatos de punto flotante binario IEEE 754, los valores cero se representan mediante el exponente sesgado y la mantisa , que son ambos cero. El cero negativo tiene el bit de signo establecido en uno. Se puede obtener un cero negativo como resultado de ciertos cálculos, por ejemplo, como resultado de un desbordamiento aritmético en un número negativo (también pueden ser posibles otros resultados), o −1.0×0.0
, o simplemente como −0.0
.
En los formatos de punto flotante decimal IEEE 754, un cero negativo se representa mediante un exponente que es cualquier exponente válido en el rango del formato, siendo el verdadero significado cero y el bit de signo uno.
El estándar de punto flotante IEEE 754 especifica el comportamiento del cero positivo y del cero negativo en diversas operaciones. El resultado puede depender de la configuración actual del modo de redondeo IEEE .
En sistemas que incluyen ceros con signo y sin signo, a veces se utiliza la notación y para ceros con signo.
La suma y la multiplicación son operaciones conmutativas, pero hay algunas reglas especiales que deben seguirse, lo que significa que las reglas matemáticas habituales para la simplificación algebraica pueden no ser aplicables. El signo que aparece a continuación muestra los resultados de punto flotante obtenidos (no es el operador de igualdad habitual).
Al multiplicar o dividir siempre se sigue la regla habitual para los signos:
Existen reglas especiales para sumar o restar cero con signo:
Debido al cero negativo (y también cuando el modo de redondeo es hacia arriba o hacia abajo), las expresiones −( x − y ) y (− x ) − (− y ) , para las variables de punto flotante x e y , no pueden reemplazarse por y − x . Sin embargo, (−0) + x puede reemplazarse por x con redondeo al más cercano (excepto cuando x puede ser un NaN de señalización ).
Algunas otras reglas especiales:
La división de un número distinto de cero por cero activa el indicador de división por cero y una operación que produzca un NaN activa el indicador de operación no válida. Se llama a un controlador de excepciones si está habilitado para el indicador correspondiente.
Según el estándar IEEE 754, el cero negativo y el cero positivo deben compararse como iguales con los operadores de comparación (numéricos) habituales, como los ==
operadores de C y Java . En esos lenguajes, pueden ser necesarios trucos de programación especiales para distinguir los dos valores:
copysign()
función ISO C (operación copySign IEEE 754) para copiar el signo del cero a algún número distinto de cero;signbit()
macro ISO C (operación isSignMinus IEEE 754) que devuelve si el bit de signo de un número está establecido;Nota: La conversión a tipo integral no siempre funcionará, especialmente en sistemas de complemento a dos.
Sin embargo, algunos lenguajes de programación pueden proporcionar operadores de comparación alternativos que sí distinguen los dos ceros. Este es el caso, por ejemplo, del método equals en Double
la clase contenedora de Java . [4]
De manera informal, se puede utilizar la notación "−0" para un valor negativo que se redondeó a cero. Esta notación puede ser útil cuando un signo negativo es significativo; por ejemplo, al tabular temperaturas en grados Celsius , donde un signo negativo significa por debajo del punto de congelación .
En mecánica estadística , a veces se utilizan temperaturas negativas para describir sistemas con inversión de población , que pueden considerarse que tienen una temperatura mayor que el infinito positivo, porque el coeficiente de energía en la función de distribución de población es −1/Temperatura. En este contexto, una temperatura de −0 es una temperatura (teórica) mayor que cualquier otra temperatura negativa, correspondiente al grado máximo concebible (teórico) de inversión de población, el extremo opuesto a +0. [5]
SIGN
en Fortran 95 para adaptarse al cero negativo