198 votes

Que signifie cette notation de crochet carré et de crochet parenthèse [first1, last1)?

J'ai vu des plages de nombres représentées comme [premier1,dernier1) et [premier2,dernier2).

J'aimerais savoir ce que signifie une telle notation.

5 votes

[premier, dernier) est un intervalle semi-ouvert comme d'autres l'ont noté. Dans certains manuels, cela est également écrit comme [premier, dernier> et a exactement la même signification, seule la syntaxe est différente.

13 votes

Un meilleur endroit pour cette question serait math.stackexchange.com (à mon avis). Mais peu importe! :)

13 votes

En tant que mnémotechnique, pensez que le crochet carré agrippe cette valeur, ce qui signifie "jusqu'à et y compris". Et la parenthèse ronde est plus douce et moins restrictive, ce qui signifie : "jusqu'à mais non compris".

328voto

Michael Mrozek Points 44120

Un crochet - [ ou ] - signifie que la fin de l'intervalle est inclusive -- il inclut l'élément indiqué. Une parenthèse - ( ou ) - signifie que la fin est exclusive et ne contient pas l'élément indiqué. Donc pour [premier1, dernier1), l'intervalle commence avec premier1 (et l'inclut), mais se termine juste avant dernier1.

En supposant des entiers :

  • (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

5 votes

Cela évolue de l'algèbre précoce à l'école primaire, où vous apprenez sur les fonctions f(x) et le domaine et l'ensemble de la fonction, où une fonction comme f(x)=x^2, aurait un ensemble de 0 à l'infini positif, indiqué avec [0,).

2 votes

@Timbo n'est pas un nombre.

5 votes

@pycoder votre définition de nombre semble restrictif fr.wikipedia.org/wiki/Nombres_surréalistes

43voto

Mark Byers Points 318575

Il s'agit d'un intervalle semi-ouvert.

  • Un intervalle fermé [a,b] inclut les points finaux.
  • Un intervalle ouvert (a,b) les exclut.

Dans votre cas, le point final au début de l'intervalle est inclus, mais à la fin, il est exclu. Cela signifie donc l'intervalle "premier1 <= x < dernier1".

Les intervalles semi-ouverts sont utiles en programmation car ils correspondent à l'idiome commun pour les boucles :

for (int i = 0; i < n; ++i) { ... } 

Ici, i est dans la plage [0, n).

23voto

Michaelangel007 Points 2231

Le concept de notation d'intervalle intervient à la fois en Mathématiques et en Informatique. La notation mathématique [, ], (, ) indique le domaine (ou plage) d'un intervalle.

  • Les crochets [ et ] signifient :

    1. Le nombre est inclus,
    2. Ce côté de l'intervalle est fermé,
  • Les parenthèses ( et ) signifient :

    1. Le nombre est exclu,
    2. Ce côté de l'intervalle est ouvert.

Un intervalle avec des états mixtes est appelé "semi-ouvert".

Par exemple, la plage des entiers consécutifs de 1 à 10 (inclus) serait notée de la sorte :

  • [1,10]

Remarquez comment le mot inclus a été utilisé. Si nous voulons exclure le point final mais "couvrir" la même plage, nous devons déplacer le point final :

  • [1,11)

Pour les bords gauche et droit de l'intervalle, il existe en fait 4 permutations :

(1,10) = 2,3,4,5,6,7,8,9       L'ensemble a  8 éléments
(1,10] = 2,3,4,5,6,7,8,9,10    L'ensemble a  9 éléments
[1,10) = 1,2,3,4,5,6,7,8,9       L'ensemble a  9 éléments
[1,10] = 1,2,3,4,5,6,7,8,9,10    L'ensemble a 10 éléments

En quoi cela est-il lié aux Mathématiques et à l'Informatique ?

Les index des tableaux ont tendance à utiliser un décalage différent selon le domaine dans lequel vous vous trouvez :

  • Les Mathématiques ont tendance à être basées sur un (1).
  • Certains langages de programmation ont tendance à être basés sur zéro, comme C, C++, JavaScript, Python, tandis que d'autres langages comme Mathematica, Fortran, Pascal sont basés sur un.

Ces différences peuvent entraîner des erreurs subtiles de panneau de clôture, alias erreurs de décalage d'un lors de la mise en œuvre d'algorithmes mathématiques tels que les boucles.

Nombres entiers

Si nous avons un ensemble ou un tableau, disons des premiers nombres premiers [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ], les Mathématiciens désigneraient le premier élément comme le 1er élément absolu. c'est-à-dire en utilisant la notation en indice pour indiquer l'index :

  • a1 = 2
  • a2 = 3
  • :
  • a10 = 29

Quelques langages de programmation, en contradiction, désigneraient le premier élément comme le zéro-ième élément relatif.

  • a[0] = 2
  • a[1] = 3
  • :
  • a[9] = 29

Étant donné que les index de tableau sont dans la plage [0,N-1], il serait "bien" de garder la même valeur numérique pour la plage 0 .. N au lieu d'ajouter un bruit textuel tel qu'un décalage de -1.

Par exemple, en C ou en JavaScript, pour itérer sur un tableau de N éléments, un programmeur écrirait l'idiome courant de i = 0, i < N avec l'intervalle [0,N) au lieu du légèrement plus verbeux [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;
}

Les Mathématiciens, puisqu'ils commencent à compter à 1, utiliseraient plutôt la nomenclature i = 1, i <= N mais nous devons maintenant corriger le décalage de l'index du tableau dans un langage basé sur zéro.

par exemple

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;
}

À part :

Dans les langages de programmation basés sur 0, vous pourriez avoir besoin d'un bricolage d'un faux zéro-ième élément pour utiliser un algorithme mathématique basé sur 1. par exemple Démarrer l'index de Python

Virgule flottante

La notation d'intervalle est également importante pour les nombres à virgule flottante afin d'éviter des bugs subtils.

Lors de la manipulation de nombres à virgule flottante, en particulier en Graphisme Informatique (conversion de couleurs, géométrie computationnelle, animation, etc.), il est souvent fait usage de nombres normalisés. C'est-à-dire, des nombres entre 0.0 et 1.0.

Il est important de connaître les cas limites si les extrémités sont incluses ou exclues :

  • (0,1) = 1e-M .. 0.999...
  • (0,1] = 1e-M .. 1.0
  • [0,1) = 0.0 .. 0.999...
  • [0,1] = 0.0 .. 1.0

Où M est un epsilon machine. C'est pourquoi vous pourriez parfois voir l'idiome const float EPSILON = 1e-# dans du code C (comme 1e-6) pour un nombre à virgule flottante sur 32 bits. Cette question sur SO L'EPSILON garantit-il quelque chose ? contient quelques détails préliminaires. Pour une réponse plus complète, voir FLT_EPSILON et l'article de David Goldberg Ce que tout informaticien doit savoir sur l'arithmétique des nombres à virgule flottante

Certaines implémentations d'un générateur de nombres aléatoires, random() peuvent produire des valeurs dans la plage 0.0 .. 0.999... au lieu de la plage plus pratique 0.0 .. 1.0. Les commentaires appropriés dans le code documenteront cela comme [0.0,1.0) ou [0.0,1.0] afin qu'il n'y ait pas d'ambiguïté quant à l'utilisation.

Exemple :

  • Vous voulez générer des couleurs aléatoires(). Vous convertissez trois valeurs à virgule flottante en valeurs non signées sur 8 bits pour générer un pixel de 24 bits avec des canaux rouge, vert et bleu respectivement. Selon l'intervalle produit par random(), vous pourriez obtenir du blanc presque (254,254,254) ou blanc (255,255,255).

     +--------+-----+
     |random()|Byte |
     |--------|-----|
     |0.999...| 254 | <-- erreur introduite
     |1.0     | 255 |
     +--------+-----+

Pour plus de détails sur la précision et la robustesse des nombres à virgule flottante avec des intervalles, consultez le livre de Christer Ericson Détection de collisions en temps réel, Chapitre 11 Robustesse numérique, Section 11.3 Utilisation robuste des nombres à virgule flottante.

1voto

Eddy Points 320

Il peut s'agir d'une convention mathématique dans la définition d'un intervalle où les crochets carrés signifient "extrémité inclus" et les parenthèses rondes "extrémité exclusive".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X