Ich habe Nummernkreise gesehen, die als [first1,last1)
und dargestellt sind [first2,last2)
.
Ich würde gerne wissen, was eine solche Notation bedeutet.
Ich habe Nummernkreise gesehen, die als [first1,last1)
und dargestellt sind [first2,last2)
.
Ich würde gerne wissen, was eine solche Notation bedeutet.
[first, last)
ist ein halboffenes Intervall, wie andere angemerkt haben. In einigen Lehrbüchern wird dies auch so geschrieben[first, last>
und hat genau die gleiche Bedeutung, nur die Syntax ist unterschiedlich.Antworten:
Eine Klammer bedeutet, dass das Ende des Bereichs inklusive ist - es enthält das aufgelistete Element. Eine Klammer bedeutet, dass end exklusiv ist und das aufgelistete Element nicht enthält. Also für
[first1, last1)
beginnt der Bereich mitfirst1
(und enthält), aber endet kurz vorlast1
.Angenommene ganze Zahlen:
quelle
Das ist ein halboffenes Intervall .
[a,b]
enthält die Endpunkte.(a,b)
schließt sie aus.In Ihrem Fall ist der Endpunkt am Anfang des Intervalls enthalten, das Ende jedoch ausgeschlossen. Es bedeutet also das Intervall "first1 <= x <last1".
Halboffene Intervalle sind bei der Programmierung nützlich, da sie der allgemeinen Redewendung für Schleifen entsprechen:
Hier liegt i im Bereich [0, n).
quelle
Das Konzept der Intervall - Notation kommt in bis sowohl Mathematik und Informatik. Die mathematische Notation
[
,]
,(
,)
bezeichnet die Domäne (oder Bereich ) eines Intervalls.Die Klammern
[
und]
Mittel:Die Klammern
(
und)
Mittel:Ein Intervall mit gemischten Zuständen wird als "halboffen" bezeichnet .
Zum Beispiel würde der Bereich aufeinanderfolgender Ganzzahlen von 1 bis 10 (einschließlich) als solcher notiert :
Beachten Sie, wie das Wort
inclusive
verwendet wurde. Wenn wir den Endpunkt ausschließen möchten, aber denselben Bereich "abdecken" möchten, müssen wir den Endpunkt verschieben:Sowohl für den linken als auch für den rechten Rand des Intervalls gibt es tatsächlich 4 Permutationen:
In welcher Beziehung steht dies zu Mathematik und Informatik?
Array-Indizes verwenden in der Regel einen anderen Versatz, je nachdem, in welchem Feld Sie sich befinden:
Diese Unterschiede können bei der Implementierung mathematischer Algorithmen wie for-Schleifen zu subtilen Zaunpfostenfehlern führen , auch bekannt als " Off-by-One" -Fehler.
Ganzzahlen
Wenn wir eine Menge oder ein Array haben, beispielsweise von den ersten Primzahlen
[ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]
, würden Mathematiker das erste Element als1st
absolutes Element bezeichnen. dh Verwenden der tiefgestellten Notation zur Bezeichnung des Index:Einige Programmiersprachen würden im Gegensatz dazu das erste Element als
zero'th
relatives Element bezeichnen.Da der Array - Indizes liegt im Bereich [0, N-1] dann aus Gründen der Übersichtlichkeit wäre es „nett“ sein , den gleichen numerischen Wert für den Bereich zu halten 0 .. N anstelle von textueller Zugabe Rauschen , wie beispielsweise einen
-1
Bias.Zum Beispiel würde ein Programmierer in C oder JavaScript, um über ein Array von N Elementen zu iterieren, das gemeinsame Idiom von
i = 0, i < N
mit dem Intervall [0, N) anstelle des etwas ausführlicheren [0, N-1] schreiben :Da Mathematiker bei 1 anfangen zu zählen, würden sie stattdessen die
i = 1, i <= N
Nomenklatur verwenden, aber jetzt müssen wir den Array-Offset in einer auf Null basierenden Sprache korrigieren.z.B
Nebenbei :
In Programmiersprachen , die 0-basiert sind , haben Sie vielleicht eine Notwendigkeit kludge ein Element der nullten Dummy einen mathematischen 1-basierten Algorithmus. zB Python Index Start
Gleitkomma
Die Intervallnotation ist auch für Gleitkommazahlen wichtig, um subtile Fehler zu vermeiden.
Beim Umgang mit Gleitkommazahlen, insbesondere in der Computergrafik (Farbkonvertierung, Rechengeometrie, Lockerung / Überblendung von Animationen usw.), werden häufig normalisierte Zahlen verwendet. Das heißt, Zahlen zwischen 0,0 und 1,0.
Es ist wichtig, die Randfälle zu kennen, wenn die Endpunkte inklusive oder exklusiv sind :
Wobei M ein Maschinen-Epsilon ist . Aus diesem Grund wird
const float EPSILON = 1e-#
im C-Code manchmal eine Redewendung1e-6
für eine 32-Bit-Gleitkommazahl angezeigt. Diese SO-Frage Garantiert EPSILON etwas? hat einige vorläufige Details. Für eine umfassendere Antwort sieheFLT_EPSILON
und David Goldbergs Was jeder Informatiker über Gleitkomma-Arithmetik wissen sollteEinige Implementierungen eines Zufallszahlengenerators
random()
können Werte im Bereich von 0,0 bis 0,999 anstelle der bequemeren 0,0 bis 1,0 erzeugen. Richtige Kommentare im Code dokumentieren dies als [0.0,1.0) oder [0.0,1.0], sodass keine Unklarheiten hinsichtlich der Verwendung bestehen.Beispiel:
random()
Farben erzeugen . Sie konvertieren drei Gleitkommawerte in vorzeichenlose 8-Bit-Werte, um ein 24-Bit-Pixel mit roten, grünen und blauen Kanälen zu generieren. Abhängig von dem vonrandom()
Ihnen ausgegebenen Intervall erhalten Sie möglicherweisenear-white
(254,254,254) oderwhite
(255,255,255).Weitere Informationen zur Gleitkommapräzision und Robustheit mit Intervallen finden Sie in Christer Ericsons Echtzeit-Kollisionserkennung , Kapitel 11 Numerische Robustheit , Abschnitt 11.3 Robuste Gleitkommaverwendung .
quelle
Es kann eine mathematische Konvention bei der Definition eines Intervalls sein, in dem eckige Klammern "extrem inklusive" und runde Klammern "extrem exklusiv" bedeuten.
quelle