Vi intervalos de números representados como [first1,last1)
e [first2,last2)
.
Eu gostaria de saber o que significa essa notação.
Vi intervalos de números representados como [first1,last1)
e [first2,last2)
.
Eu gostaria de saber o que significa essa notação.
[first, last)
é um intervalo semiaberto, como outros observaram. Em alguns livros didáticos, isso também é escrito[first, last>
e tem exatamente o mesmo significado, apenas a sintaxe é diferente.Respostas:
Um colchete significa que o final do intervalo é inclusivo - inclui o elemento listado. Um parêntese significa que final é exclusivo e não contém o elemento listado. Portanto
[first1, last1)
, o intervalo começa comfirst1
(e inclui), mas termina logo anteslast1
.Assumindo números inteiros:
fonte
É um intervalo semi-aberto .
[a,b]
inclui os pontos finais.(a,b)
exclui .No seu caso, o ponto final no início do intervalo está incluído, mas o fim é excluído. Então isso significa o intervalo "first1 <= x <last1".
Intervalos semi-abertos são úteis na programação porque correspondem ao idioma comum para loop:
Aqui eu estou no intervalo [0, n).
fonte
O conceito de notação intervalo surge em ambos Matemática e Ciência da Computação. A notação matemática
[
,]
,(
,)
indica o domínio (ou gama ) de um intervalo.Os suportes
[
e]
meios:Os parênteses
(
e os)
meios:Um intervalo com estados mistos é chamado "semi-aberto" .
Por exemplo, o intervalo de números inteiros consecutivos de 1 a 10 (inclusive) seria anotado da seguinte forma:
Observe como a palavra
inclusive
foi usada. Se queremos excluir o ponto final, mas "cobrir" o mesmo intervalo, precisamos mover o ponto final:Para as bordas esquerda e direita do intervalo, existem na verdade 4 permutações:
Como isso se relaciona com a matemática e a ciência da computação?
Os índices de matriz tendem a usar um deslocamento diferente, dependendo do campo em que você está:
Essas diferenças podem levar a erros sutis de postes de cerca , também conhecidos como erros isolados por um ao implementar algoritmos matemáticos, como for-loops.
Inteiros
Se tivermos um conjunto ou matriz, digamos dos primeiros primos
[ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]
, os matemáticos se refeririam ao primeiro elemento como o elemento1st
absoluto . Por exemplo, usando notação subscrita para indicar o índice:Algumas linguagens de programação, em contraste, se refeririam ao primeiro elemento como o elemento
zero'th
relativo .Como os índices da matriz estão no intervalo [0, N-1], para fins de clareza, seria "bom" manter o mesmo valor numérico para o intervalo 0 .. N em vez de adicionar ruído textual , como um
-1
viés.Por exemplo, em C ou JavaScript, para iterar sobre uma matriz de N elementos, um programador escreveria o idioma comum
i = 0, i < N
com o intervalo [0, N) em vez do ligeiramente mais detalhado [0, N-1]:Os matemáticos, como começam a contar com 1, usariam a
i = 1, i <= N
nomenclatura, mas agora precisamos corrigir o deslocamento da matriz em uma linguagem baseada em zero.por exemplo
Fora :
Nas linguagens de programação baseadas em 0, você pode precisar de um kludge de um elemento zero zero para usar um algoritmo matemático 1. por exemplo, Python Index Start
Ponto flutuante
A notação de intervalo também é importante para números de ponto flutuante para evitar erros sutis.
Ao lidar com números de ponto flutuante, especialmente em computação gráfica (conversão de cores, geometria computacional, facilitação / mistura de animações, etc.), muitas vezes são usados números normalizados. Ou seja, números entre 0,0 e 1,0.
É importante conhecer os casos extremos se os pontos de extremidade são inclusivos ou exclusivos :
Onde M é alguma máquina epsilon . É por isso que às vezes você pode ver o
const float EPSILON = 1e-#
idioma no código C (como1e-6
) para um número de ponto flutuante de 32 bits. Esta pergunta do SO EPSILON garante alguma coisa? tem alguns detalhes preliminares. Para obter uma resposta mais abrangente, consulte o artigo deFLT_EPSILON
David Goldberg, O que todo cientista da computação deve saber sobre aritmética de ponto flutuanteAlgumas implementações de um gerador de números aleatórios
random()
podem produzir valores no intervalo 0,0 .. 0,999 ... em vez do mais conveniente 0,0 .. 1,0. Comentários adequados no código documentarão isso como [0.0,1.0) ou [0.0,1.0], portanto, não há ambiguidade quanto ao uso.Exemplo:
random()
cores. Você converte três valores de ponto flutuante em valores de 8 bits não assinados para gerar um pixel de 24 bits com canais vermelho, verde e azul, respectivamente. Dependendo do intervalo de saída,random()
você pode terminar comnear-white
(254.254.254) ouwhite
( 255.255.255 ).Para obter mais detalhes sobre precisão e robustez de ponto flutuante com intervalos, consulte Detecção de colisão em tempo real da Christer Ericson , capítulo 11 Robustez numérica , Seção 11.3 Uso robusto de ponto flutuante .
fonte
Pode ser uma convenção matemática na definição de um intervalo em que colchetes signifique "extremal inclusivo" e colchetes "extremal exclusivo".
fonte