mathematical-notation - matemáticas - parentesis cuadrado teclado
¿Qué significa este paréntesis cuadrado y la notación de paréntesis entre paréntesis[first1, last1)? (4)
He visto rangos de números representados como [first1,last1)
y [first2,last2)
.
Me gustaría saber qué significa tal notación.
El concepto de notación por intervalos aparece 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]
significa:- El número está incluido ,
- Este lado del intervalo está cerrado ,
El paréntesis
(
y)
significa:- El número está excluido ,
- Este lado del intervalo está abierto .
Un intervalo con estados mixtos se llama "medio abierto" .
Por ejemplo, el rango de enteros consecutivos desde 1 ... 10 (inclusive) se anotaría como tal:
- [1,10]
Observe cómo se usó la palabra inclusive
. Si queremos excluir el punto final pero "cubrir" el mismo rango, necesitamos mover el punto final:
- [1,11)
Para los bordes izquierdo y derecho del intervalo, en realidad hay 4 permutaciones:
(1,10) = 2,3,4,5,6,7,8,9 Set has 8 elements
(1,10] = 2,3,4,5,6,7,8,9,10 Set has 9 elements
[1,10) = 1,2,3,4,5,6,7,8,9 Set has 9 elements
[1,10] = 1,2,3,4,5,6,7,8,9,10 Set has 10 elements
¿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:
- Las matemáticas tienden a ser de una sola base.
- Ciertos lenguajes de programación tienden a ser de base cero , como C, C ++, Javascript, Python, mientras que otros lenguajes como Mathematica, Fortran, Pascal se basan en una sola fuente.
Estas diferencias pueden dar lugar a errores sutiles en la valla publicitaria , es decir, errores " off-by-one cuando se implementan algoritmos matemáticos, como for-loops.
Enteros
Si tenemos un conjunto o conjunto, 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 1st
elemento absoluto . es decir, utilizando la notación de subíndice para denotar el índice:
- a 1 = 2
- a 2 = 3
- :
- a 10 = 29
Algunos lenguajes de programación, en contraposición, se referirían al primer elemento como el elemento relativo zero''th
.
- a [0] = 2
- a [1] = 3
- :
- a [9] = 29
Dado que los índices de matriz están en el rango [0, N-1], entonces, para mayor claridad, sería "bueno" mantener el mismo valor numérico para el rango 0 .. N en lugar de agregar ruido textual, como un sesgo -1
.
Por ejemplo, en C o JavaScript, para iterar sobre una matriz de N elementos, un programador escribiría la expresión común de i = 0, i < N
con el intervalo [0, N) en lugar de la ligeramente más detallada [0, N- 1]:
function main() {
var output = "";
var a = [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ];
for( var i = 0; i < 10; i++ ) // [0,10)
output += "[" + i + "]: " + a[i] + "/n";
if (typeof window === ''undefined'') // Node command line
console.log( output )
else
document.getElementById(''output1'').innerHTML = output;
}
<html>
<body onload="main();">
<pre id="output1"></pre>
</body>
</html>
Los matemáticos, dado que comienzan a contar en 1, usarían en su lugar la nomenclatura i = 1, i <= N
pero ahora necesitamos corregir el desplazamiento de la matriz en un lenguaje basado en cero.
p.ej
function main() {
var output = "";
var a = [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ];
for( var i = 1; i <= 10; i++ ) // [1,10]
output += "[" + i + "]: " + a[i-1] + "/n";
if (typeof window === ''undefined'') // Node command line
console.log( output )
else
document.getElementById( "output2" ).innerHTML = output;
}
<html>
<body onload="main()";>
<pre id="output2"></pre>
</body>
</html>
Aparte :
En lenguajes de programación que están basados en 0, es posible que necesite un kludge de un elemento ficticio zero''th para usar un algoritmo matemático basado en 1. por ejemplo, Python Index Start
Punto flotante
La notación de intervalo también es importante para los números de coma flotante para evitar errores sutiles.
Cuando se trata de números de coma flotante, especialmente en gráficos por computadora (conversión de colores, geometría computacional, suavizado / mezcla de animación, etc.) a menudo se utilizan 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 :
- (0,1) = 1e-M .. 0,999 ...
- (0,1) = 1e-M .. 1.0
- [0,1) = 0.0 .. 0.999 ...
- [0,1] = 0.0 .. 1.0
Donde M es una máquina épsilon . Es por esto que a veces puede ver const float EPSILON = 1e-#
idioma en el código C (como 1e-6
) para un número de coma flotante de 32 bits. Esta pregunta SO ¿Garantiza EPSILON algo? tiene algunos detalles preliminares. Para una respuesta más completa, vea FLT_EPSILON
y David Goldberg, " Lo que todo científico informático debería saber sobre la aritmética de coma flotante".
Algunas implementaciones de un generador de números aleatorios, random()
pueden producir valores en el rango de 0.0 .. 0.999 ... en lugar de los más convenientes 0.0 .. 1.0. Los comentarios correctos en el código documentarán esto como [0.0,1.0) o [0.0,1.0] por lo que no hay ambigüedad en cuanto al uso.
Ejemplo:
- Desea generar colores
random()
. Convierta tres valores de punto flotante en valores de 8 bits sin signo para generar un píxel de 24 bits con canales rojo, verde y azul, respectivamente. Dependiendo de la salida de intervalo porrandom()
puede terminar connear-white
(254,254,254) owhite
(255,255,255).
+--------+-----+ |random()|Byte | |--------|-----| |0.999...| 254 | <-- error introduced |1.0 | 255 | +--------+-----+
Para obtener más detalles sobre la precisión de coma flotante y la robustez con intervalos, consulte la Detección de colisiones en tiempo real de Christer Ericson, Capítulo 11 Robustez numérica , Sección 11.3 Uso robusto de puntos flotantes .
Ese es un intervalo medio abierto .
- Un intervalo cerrado
[a,b]
incluye los puntos finales. - Un intervalo abierto
(a,b)
excluye .
En su caso, se incluye el punto final al comienzo del intervalo, pero se excluye el final. Por lo tanto, significa el intervalo "first1 <= x <last1".
Los intervalos a medio abrir son útiles en la programación porque corresponden a la expresión común para el bucle:
for (int i = 0; i < n; ++i) { ... }
Aquí estoy en el rango [0, n).
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".
Un paréntesis significa que el final del rango es inclusivo , incluye el elemento enumerado. Un paréntesis significa que el final es exclusivo y no contiene el elemento enumerado. Entonces para [first1, last1)
, el rango comienza con first1
(y lo incluye), pero termina justo antes de last1
.
Asumiendo enteros:
- (0, 5) = 1, 2, 3, 4
- (0, 5) = 1, 2, 3, 4, 5
- [0, 5) = 0, 1, 2, 3, 4
- [0, 5] = 0, 1, 2, 3, 4, 5