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.
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.
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 :
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,).
@pycoder votre définition de nombre semble restrictif fr.wikipedia.org/wiki/Nombres_surréalistes
Il s'agit d'un intervalle semi-ouvert.
[a,b]
inclut les points finaux.(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).
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 :
Les parenthèses (
et )
signifient :
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 :
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 :
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 :
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.
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 :
Quelques langages de programmation, en contradiction, désigneraient le premier élément comme le zéro-ième
élément relatif.
É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
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 :
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.
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.
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".
0 votes
En tant que programmeur, chaque fois que je vois des crochets carrés, cela me rappelle toujours la forme étendue de Backus-Naur - fr.wikipedia.org/wiki/Forme_normale_de_Chomsky
3 votes
Je recommande de migrer ceci vers math.SE
7 votes
Mnémonique alternatif, si vous mettez les crochets carrés dos à dos dans l'ordre inverse, cela ressemble à un I majuscule pour inclusif :
][
. Ou si vous mettez des parenthèses dos à dos dans l'ordre inverse, cela ressemble à un X pour exclusif :)(
0 votes
Je pense que cette question est valable dans StackOverflow. Parfois, la notation d'intervalle apparaît dans la documentation des bibliothèques ou des langages. Par exemple, "Math.random() renvoie un flottant dans la plage [0, 1)."