He visto rangos de números representados como [first1,last1)
y [first2,last2)
.
Me gustaría saber qué significa tal notación.
He visto rangos de números representados como [first1,last1)
y [first2,last2)
.
Me gustaría saber qué significa tal notación.
[first, last)
es un intervalo medio abierto como otros han notado. En algunos libros de texto, esto también se escribe[first, last>
y tiene exactamente el mismo significado, solo que la sintaxis es diferente.Respuestas:
Un paréntesis significa que el final del rango es inclusivo : incluye el elemento listado. Un paréntesis significa que el final es exclusivo y no contiene el elemento listado. Entonces
[first1, last1)
, el rango comienza confirst1
(y lo incluye), pero termina justo anteslast1
.Suponiendo enteros:
fuente
Eso es un intervalo medio abierto .
[a,b]
incluye los puntos finales.(a,b)
excluye .En su caso, se incluye el punto final al comienzo del intervalo, pero se excluye el final. Entonces significa el intervalo "first1 <= x <last1".
Los intervalos medio abiertos son útiles en la programación porque corresponden al idioma común para el bucle:
Aquí estoy en el rango [0, n).
fuente
El concepto de notación de intervalos surge tanto en Matemáticas como en Ciencias de la Computación. La notación matemática
[
,]
,(
,)
denota el dominio (o rango ) de un intervalo.Los corchetes
[
y los]
medios:El paréntesis
(
y los)
medios:Un intervalo con estados mixtos se llama "medio abierto" .
Por ejemplo, el rango de enteros consecutivos de 1 .. 10 (inclusive) se anotaría como tal:
Observe cómo
inclusive
se usó la palabra . Si queremos excluir el punto final pero "cubrir" el mismo rango, necesitamos mover el punto final:Para los bordes izquierdo y derecho del intervalo, en realidad hay 4 permutaciones:
¿Cómo se relaciona esto con las matemáticas y la informática?
Los índices de matriz tienden a usar un desplazamiento diferente según el campo en el que se encuentre:
Estas diferencias pueden dar lugar a sutiles errores poste de la cerca , también conocido como off-by-one errores en la aplicación de algoritmos matemáticos, tales como para-bucles.
Enteros
Si tenemos un conjunto o matriz, digamos de los primeros números primos
[ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]
, los matemáticos se referirían al primer elemento como el elemento1st
absoluto . es decir, usar la notación de subíndice para denotar el índice:Algunos lenguajes de programación, en contraste, se referirían al primer elemento como el elemento
zero'th
relativo .Dado que los índices de la matriz están en el rango [0, N-1], entonces, por razones de claridad, sería "bueno" mantener el mismo valor numérico para el rango 0 .. N en lugar de agregar ruido textual como un
-1
sesgo.Por ejemplo, en C o JavaScript, para iterar sobre una matriz de N elementos, un programador escribiría el idioma común
i = 0, i < N
con el intervalo [0, N) en lugar del ligeramente más detallado [0, N-1]:Los matemáticos, dado que comienzan a contar en 1, en su lugar usarían la
i = 1, i <= N
nomenclatura, pero ahora necesitamos corregir el desplazamiento de la matriz en un lenguaje basado en cero.p.ej
Aparte :
En los lenguajes de programación basados en 0, es posible que necesite un kludge de un elemento ficticio cero para usar un algoritmo matemático basado en 1. por ejemplo , inicio de índice de Python
Punto flotante
La notación de intervalo también es importante para los números de punto flotante para evitar errores sutiles.
Cuando se trata de números de punto flotante, especialmente en Gráficos por computadora (conversión de color, geometría computacional, suavizado / fusión de animación, etc.) a menudo se usan números normalizados. Es decir, números entre 0.0 y 1.0.
Es importante conocer los casos límite si los puntos finales son inclusivos o exclusivos :
Donde M es alguna máquina épsilon . Es por eso que a veces puede ver
const float EPSILON = 1e-#
modismos en el código C (como1e-6
) para un número de coma flotante de 32 bits. Esta pregunta SO ¿EPSILON garantiza algo? Tiene algunos detalles preliminares. Para obtener una respuesta más completa, consulte el artículo deFLT_EPSILON
David Goldberg Lo que todo informático debe saber sobre la aritmética de coma flotante.Algunas implementaciones de un generador de números aleatorios
random()
pueden producir valores en el rango 0.0 .. 0.999 ... en lugar del más conveniente 0.0 .. 1.0. Los comentarios correctos en el código documentarán esto como [0.0,1.0) o [0.0,1.0] para que no haya ambigüedad en cuanto al uso.Ejemplo:
random()
colores. Convierte tres valores de coma flotante en valores de 8 bits sin signo para generar un píxel de 24 bits con canales rojo, verde y azul, respectivamente. Dependiendo del intervalo de salida por elrandom()
que puede terminar connear-white
(254,254,254) owhite
(255,255,255).Para obtener más detalles sobre la precisión de punto flotante y la robustez con intervalos, consulte Detección de colisión en tiempo real de Christer Ericson , Capítulo 11 Robustez numérica , Sección 11.3 Uso robusto de punto flotante .
fuente
Puede ser una convención matemática en la definición de un intervalo donde los corchetes significan "extremal inclusivo" y los corchetes "extremal exclusivo".
fuente