J'ai vu des plages de nombres représentées par [first1,last1)
et [first2,last2)
.
J'aimerais savoir ce que signifie une telle notation.
J'ai vu des plages de nombres représentées par [first1,last1)
et [first2,last2)
.
J'aimerais savoir ce que signifie une telle notation.
Réponses:
Un crochet signifie que la fin de la plage est inclusive - elle inclut l'élément répertorié. Une parenthèse signifie que la fin est exclusive et ne contient pas l'élément répertorié. Donc pour [first1, last1)
, la plage commence par first1
(et l'inclut), mais se termine juste avant last1
.
En supposant des entiers:
C'est un intervalle semi-ouvert .
[a,b]
comprend les points d'extrémité.(a,b)
exclut .Dans votre cas, le point final au début de l'intervalle est inclus, mais la fin est exclue. Cela signifie donc l'intervalle "first1 <= x <last1".
Les intervalles semi-ouverts sont utiles en programmation car ils correspondent à l'idiome commun pour la boucle:
for (int i = 0; i < n; ++i) { ... }
Ici, i est compris entre [0, n).
Le concept de notation par intervalles apparaît à la fois en mathématiques et en informatique. La notation mathématique [
, ]
, (
, )
désigne le domaine (ou gamme ) d'un intervalle.
Les parenthèses [
et ]
signifie:
La parenthèse (
et )
signifie:
Un intervalle avec des états mixtes est appelé "semi-ouvert" .
Par exemple, la plage d'entiers consécutifs de 1 à 10 (inclus) serait notée comme telle:
Remarquez comment le mot a inclusive
été utilisé. Si nous voulons exclure le point final mais "couvrir" la même plage, nous devons déplacer le point final:
Pour les bords gauche et droit de l'intervalle, il y a en fait 4 permutations:
(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
Quel est le lien avec les mathématiques et l'informatique?
Les index de tableau ont tendance à utiliser un décalage différent en fonction du champ dans lequel vous vous trouvez:
Ces différences peuvent conduire à de subtiles erreurs de poteaux de clôture , alias, des bogues ponctuels lors de la mise en œuvre d'algorithmes mathématiques tels que les boucles for.
Si nous avons un ensemble ou un tableau, disons des quelques premiers nombres premiers [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]
, les mathématiciens appelleraient le premier élément l' élément 1st
absolu . ie En utilisant la notation en indice pour désigner l'index:
Certains langages de programmation, par opposition, appelleraient le premier élément l' élément zero'th
relatif .
Puisque les index de tableau sont dans la gamme [0, N-1], alors pour des raisons de clarté, il serait "bien" de conserver la même valeur numérique pour la gamme 0 .. N au lieu d'ajouter du bruit textuel tel qu'un-1
biais.
Par exemple, en C ou JavaScript, pour parcourir un tableau de N éléments, un programmeur écrirait l'idiome commun 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;
}
<html>
<body onload="main();">
<pre id="output1"></pre>
</body>
</html>
Les mathématiciens, puisqu'ils commencent à compter à 1, utiliseraient plutôt la i = 1, i <= N
nomenclature, mais nous devons maintenant corriger le décalage 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;
}
<html>
<body onload="main()";>
<pre id="output2"></pre>
</body>
</html>
À part :
Dans les langages de programmation basés sur 0, vous pourriez avoir besoin d'un kludge d'un zéro élément factice pour utiliser un algorithme mathématique 1. par exemple Début de l'index Python
La notation par intervalles est également importante pour les nombres à virgule flottante afin d'éviter des bogues subtils.
Lorsqu'il s'agit de nombres à virgule flottante, en particulier en infographie (conversion de couleur, géométrie de calcul, accélération / fusion d'animation, etc.), des nombres normalisés sont souvent utilisés. Autrement dit, des nombres compris entre 0,0 et 1,0.
Il est important de connaître les cas limites si les points de terminaison sont inclusifs ou exclusifs :
Où M est une machine epsilon . C'est pourquoi vous pouvez parfois voir des const float EPSILON = 1e-#
expressions idiomatiques dans le code C (comme 1e-6
) pour un nombre à virgule flottante 32 bits. Cette question SO EPSILON garantit-il quelque chose? a quelques détails préliminaires. Pour une réponse plus complète, voir FLT_EPSILON
et David Goldberg's ce que tout informaticien devrait savoir sur l'arithmétique à virgule flottante de
Certaines implémentations d'un générateur de nombres aléatoires random()
peuvent produire des valeurs comprises entre 0,0 et 0,999 ... au lieu de 0,0 à 1,0, plus pratique. Des commentaires appropriés dans le code documenteront ceci comme [0.0,1.0) ou [0.0,1.0] donc il n'y a aucune ambiguïté quant à l'utilisation.
Exemple:
random()
couleurs. Vous convertissez trois valeurs à virgule flottante en valeurs 8 bits non signées pour générer un pixel 24 bits avec des canaux rouge, vert et bleu respectivement. Selon l'intervalle de sortie, random()
vous pouvez obtenir near-white
(254,254,254) ou white
(255,255,255). +--------+-----+
|random()|Byte |
|--------|-----|
|0.999...| 254 | <-- error introduced
|1.0 | 255 |
+--------+-----+
Pour plus de détails sur la précision en virgule flottante et la robustesse avec des intervalles, voir Détection de collision en temps réel de Christer Ericson , Chapitre 11 Robustesse numérique , Section 11.3 Utilisation robuste de la virgule flottante .
Il peut s'agir d'une convention mathématique dans la définition d'un intervalle où les crochets signifient "extrémal inclus" et les crochets ronds "extremal exclusif".
[first, last)
est un intervalle semi-ouvert comme d'autres l'ont noté. Dans certains manuels, cela est également écrit comme[first, last>
et a exactement la même signification, seule la syntaxe est différente.