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 en las operaciones de comparación numérica pero con posibles comportamientos diferentes en operaciones particulares. Esto ocurre en las representaciones de números con signo de magnitud de signo y complemento a uno para números enteros, y en la mayoría de las representaciones de números de punto flotante . El número 0 normalmente se codifica como +0, pero aún puede representarse como +0, −0 o 0.
El estándar IEEE 754 para aritmética de punto flotante (actualmente utilizado por la mayoría de las computadoras y lenguajes de programación que admiten números de punto flotante) requiere +0 y −0. La aritmética real con ceros con signo puede considerarse una variante de la recta numérica real extendida tal que 1/−0 = − ∞ y 1/+0 = +∞; la división solo está indefinida para ± 0/±0 y ±∞/±∞.
El cero con signo negativo hace eco del 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 indicar 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 va en contra de la suposición habitual hecha en matemáticas de que el cero negativo tiene 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 de cero se comportan igual en comparaciones numéricas, producen resultados diferentes en algunas operaciones.
Los formatos de enteros binarios pueden utilizar varias codificaciones . En la codificación en complemento a dos , ampliamente utilizada , el cero no está firmado. En una representación de signo y magnitud de 1+7 bits para números enteros, el cero negativo está representado por la cadena de bits 1000 0000 . En una representación en complemento a uno de 8 bits , el cero negativo está representado por la cadena de bits 1111 1111 . En estas tres codificaciones, el cero positivo o sin signo está representado por 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 binarios de punto flotante IEEE 754, los valores cero están representados por el exponente sesgado y significa que ambos son 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 insuficiente 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 el 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 y sin signo, la notación y a veces se utiliza para ceros con signo.
La suma y la multiplicación son conmutativas, pero hay algunas reglas especiales que deben seguirse, lo que significa que es posible que no se apliquen las reglas matemáticas habituales para la simplificación algebraica. El siguiente signo 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 ceros 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 variables de punto flotante x e y , no se pueden reemplazar por y −x . _ Sin embargo, (−0) + x se puede reemplazar por x redondeando 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 establece el indicador de división por cero , y una operación que produce un NaN establece 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 habituales (numéricos), como los ==
operadores de C y Java . En esos lenguajes, es posible que se necesiten 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 IEEE 754 isSignMinus) que devuelve si el bit de signo de un número está establecido;Nota: La conversión al tipo integral no siempre funcionará, especialmente en sistemas en complemento a dos.
Sin embargo, algunos lenguajes de programación pueden proporcionar operadores de comparación alternativos que distinguen los dos ceros. Este es el caso, por ejemplo, del método igual en Double
la clase contenedora de Java . [4]
De manera informal, se puede utilizar la notación "-0" para un valor negativo redondeado a cero. Esta notación puede resultar útil cuando un signo negativo es significativo; por ejemplo, al tabular temperaturas en grados Celsius , donde un signo negativo significa temperaturas bajo cero .
En mecánica estadística , a veces se utilizan temperaturas negativas para describir sistemas con inversión de población , que se puede considerar 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 (teórico) concebible de inversión de población, el extremo opuesto a +0. [5]
{{cite journal}}
: Citar diario requiere |journal=
( ayuda )SIGN
en Fortran 95 para acomodar el cero negativo