Artikel-Schlagworte: „Zahlen“

Eigenschaften von Mengen

Samstag, 14. November 2009

In diesem Artikel möchte ich alle Eigenschaften sammeln, die man zu den Reellen und Natürlichen Zahlen wissen sollte.

Beschränkte Mengen

Seit die Menge A \in \mathbb{R}. Angenommen es gibt ein s \in \mathbb{R}, für das gilt: \forall x \in A x \leq s – man kann auch A \leq s schreiben -

“jedes Element der Menge ist kleiner als s”

Wenn gilt \exists s \in \mathbb{R} \: A \leq s, so heißt die Menge A nach oben beschränkt.
Mehr Informationen im der Wikipedia: Beschränkte Mengen.

Beispiel:
\{x \in \mathbb{R} \mid x^2 < 9\} so ist die Menge nach oben und unten beschränkt: [-3 \mid 3].

Supremum und Infimum

Supremum/Infimum bezeichnet die obere/untere Schranke einer Menge.
Angenommen wir hätten eine Menge A = \{x \in \mathbb{R} \mid x < 2 \}, so liegt das Supremum dieser Menge bei 2, weil 2 die kleinste obere Schranke von A ist. 3 wäre auch eine Schranke, aber nicht die kleinste und damit auch nicht das Supremum von A. Es gibt immer max. ein Supremum und Infimum, aber nicht zwangsweise.
Das Infimum ist ziemlich ähnlich zum Supremum, es ist bloß die größte untere Schranke von einer Menge. So hat zum Beispiel A kein Infiumum, weil alle Zahlen < 2 in der Menge enthalten sind.
Beispiel I.2.3

Maximum

Das Maximum ist dem Supremum sehr ähnlich. Jedes Maximum ist auch gleichzeitig das Supremum der Menge. Das Maximum ist die größte Zahl die in der Menge enthalten ist. Dabei muss es nicht immer ein Maximum geben: In der Beispielmenge A von Supremum und Infimum gibt es kein Maximum, weil es unendlich viele Zahlen gibt, die größer sind als ihr Vorgänger, aber kleiner als 2.
Definieren wir eine neue Menge B = \{x \in \mathbb{R} \mid x \leq 2 \}, so gibt es hier ein Maximum – genau 2.

PDF Drucker    Sende Artikel als PDF an

Die reellen Zahlen

Sonntag, 25. Oktober 2009

Körperaxiome

  • Kommutativgesetz für die Addition
    a+b=b+a
  • Assoziativgesetz für die Addition
    (a+b)+c=a+(b+c)
  • es gibt ein 0 \in \mathbb{R}, sodass a+0=a gilt, für alle a \in \mathbb{R}
  • zu jedem a \in \mathbb{R} gibt es genau ein -a \in \mathbb{R}, und es gilt a + (-a) = 0
  • Kommutativgesetz für die Multiplikation
    ab=ba
  • Assoziativgesetz für die Multiplikation
    (ab)c=a(bc)
  • es gibt ein 1 \in \mathbb{R}, sodass a1 = 1a = a gilt, für alle a \in \mathbb{R}
  • zu jedem a \in \mathbb{R} mit a \neq 0 gibt es genau ein \frac{1}{a} \in \mathbb{R} mit a \frac{1}{a} = 1
  • Distributivgesetz
    (a+b)c=ac+bc

Anordnungsaxiome

  • es gibt genau eine der Beziehungen: a<b; a=b; b<a
  • aus a<b und b<c folgt a<c
  • aus a<b folgt a+c<b+c
  • aus a<b und 0<c folgt ac<bc

Die Vollständigkeit der reellen Zahlen

Man kann eine obere und untere Grenze einer Menge definieren. Diese Grenzen werden auch als Supremum (obere Grenze) und Infimum (untere Grenze) bezeichnet. Dabei existiert nicht in jeder Menge ein Supremum bzw. Infimum. Ist eine Menge z.B. definiert als [0;\infty[ so besitzt sie ein Inf. (= 0) aber kein Sup.

Beispiel:
A=\{a+\frac{1}{n}|n \in \mathbb{N}\}
Sup A ist 2
Inf A ist 1

Vollständigkeitsaxiom

“Jede nichtleere beschränkte Teilmenge von \mathbb{R} besitzt in \mathbb{R} ein Supremum.”

Eine Konsequenz dieses Axioms ist das Archimedische Prinzip:
\forall x \in \mathbb{R} (x > 0 \implies \exists n \in \mathbb{N} x < n)

PDF Creator    Sende Artikel als PDF an

Das Zweierkomplement und der Grund dafür

Samstag, 17. Oktober 2009

In diesem Artikel soll es um die Details gehen, wie man ganze Zahlen (sowohl positiv also auch negativ) binär darstellt.

Binäre Zahlen bestehen nur aus 1 und 0, dass sollte allgemein bekannt sein. Das erste Bit einer Zahl wird auch als most significant bit (msb) bzw. das Letzte least significant bit (lsb) bezeichnet.

Natürliche Zahlen

Stellen wir zuerst nur positive Zahlen binär dar. Das ist relativ einfach, denn die Wertigkeit der Bits steigt, je weiter man nach Links geht.
Sehen wir uns als Beispiel die Zahlen 5_{10} und 12_{10} an (N ist die Nummer des Bits):

Dezimal     Binär
+5          0    1    0    1
+12         1    1    0    0

N           4    3    2    1
Wertigkeit  2^3  2^2  2^1  2^0

Die Wertigkeit eines Bits ist also immer die
2 hoch die Bitnummer – 1, mathematisch ausgedrückt: 2^{N-1}. Wenn wir jetzt den Wert einer binären Zahl im Dezimalsystem ausrechnen wollen, multiplizieren wir einfach den binären Wert mit der jeweiligen Wertigkeit:
0101_2 = 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 5_{10}
1100_2 = 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0 = 12_{10}

Der Wertebereich für positive Binärzahlen sieht also folgendermaßen aus: 2^N-1
N ist die Anzahl der Bits, dh. mit einer 4Bit Zahl können wir max. bis 2^4-1 = 15_{10} zählen, weil die 0 als erster Wert zählt (also können wir von 0 - 15 zählen).

Die mathematische Formel um den Wert einer nur-positiven Binärzahl auszurechen:
A: \{a_{n-1}, a_{n-2}, ..., a_1, a_0\}
A = \sum_{i=0}^{n-1} a_i 2^i

Darstellung mit Vorzeichen und Betrag

Im Dezimalsystem ist eine negative Zahl das gleiche wie eine Positive bloß mit einem Minus vor der Zahl und natürlich dem (negativem) Wert. Im Binärsystem könnte (und kann) man das ähnlich regeln. Gehen wir von einer Zahl mit fixer Länge von 4Bit und dem Wert 5_{10} aus. Wenn wir diese Zahl negativ darstellen wollen, könnten wir einfach das msb reservieren. Ist es 1, interpretieren wir den Wert der Zahl als negativ; ist es 0 ist die Zahl positiv:

Dezimal     Binär
+5       =  0101
-5       =  1101

Damit ändert sich aber der Wertebereich der Zahl, denn es steht ein Bit weniger zur freien Verfügung:
[-(2^{N-1}-1) ; 2^{N-1}-1]

Das Problem dieser Darstellungsform ist, dass es 2 Möglichkeiten gibt, eine 0_{10} darzustellen:

Dezimal     Binär
+0       =  0000
-0       =  1000

Auch deshalb funktioniert die gewohnte (und einfache) Addition nicht mehr. Dieses Problem in einem Mikrochip zu umgehen ist sehr aufwendig und bei weitem nicht so schnell wie wenn man binäre Zahlen als Zweierkomplement kodieren würde; das ist der Grund warum sich – zumindest im IT Bereich – das Zweierkomplement durchgesetzt hat.

Die mathematische Formel um den Wert auszurechen:
A: \{a_{n-1}, a_{n-2}, ..., a_1, a_0\}
A = (-1)^{a_{n-1}} \sum_{i=0}^{n-2} a_i 2^i

Das legendäre Zweierkomplement

Das Zweierkomplement behebt alle diese Probleme. Ich persönlich finde das Zweierkomplement genial, es ergibt eine gleichmäßige Linie – ohne Ecken und Kanten (oder Workarounds) – und macht sich im weiterem Verlauf sehr bezahlt.

Zur besseren Visualisierung möchte ich einfach mal alle Werte einer 4Bit Zahl vorgeben:

Dezimal     Binär
+7       =  0111
+6       =  0110
+5       =  0101
+4       =  0100
+3       =  0011
+2       =  0010
+1       =  0001
----------------
+0       =  0000
----------------
-1       =  1111
-2       =  1110
-3       =  1101
-4       =  1100
-5       =  1011
-6       =  1010
-7       =  1001
-8       =  1000

Das msb zeigt nach wie vor an, ob die Zahl negativ oder positiv ist. Im positiven Bereich ist alles gleich geblieben, allerdings hat sich einiges im negativen Bereich geändert.

Der Wertebereich sieht demnach folgendermaßen aus:
[-(2^{N-1}) ; 2^{N-1}-1]

Die mathematische Formel um den Wert eines Zweierkomplements auszurechen:
A: \{a_{n-1}, a_{n-2}, ..., a_1, a_0\}
A = a_{n-1}(-2^{n-1}) + \sum_{i=0}^{n-2} a_i 2^i

Von der Zahl zum Zweierkomplement

Will man eine positive Zahl im Zweierkomplement darstellen muss man nur darauf achten dass das msb 0 ist. Bei einer negativen Zahl muss es demnach 1 sein. Danach rechnet man den Wertebereich (ohne msb) aus und subtrahiert die darzustellende Zahl vom Wertebereich. Das Ergebnis muss nun einfach binär an das msb angehangen werden.
Beispiel mit einer 5Bit Zahl -5 darstellen:
2^4 - 5 = 16 - 5 = 11_{10} = 1011_2
Schlussendlich noch das msb anhängen, das 1 sein muss, weil es sich um eine negative Zahl handelt. -5 lautet also als Zweierkomplement 11011.

Es gibt noch eine andere und vor allem schnellere Methode um den Wert auszurechnen. Dazu muss man alle Bits invertieren und 1 zum Ergebnis addieren. Danach hat man eine positive Zahl mit dem Betragswert der negativen Zahl. Das Verfahren funktioniert in beide Richtungen, also vom positivem zum negativem Wert als auch vom negativem zum positivem Wert.
Beispiel mit der Zahl 11011_2:

  • Invertieren: 11011 -> 00100
  • 1 addieren: 00100 -> 00101 (= 5_{10})

Eine kleine Anmerkung gibt es allerdings noch: Wenn man (wie gewohnt) eine positive und negative Zahl als Zweierkomplement addiert, kann es vorkommen dass man bei der Addition des msb noch einen Übertrag erhält. Diesen kann man einfach ignorieren!

  0101
+ 1110
------
  0011

Eigentlich müsste das Ergebnis 10011 lauten, aber da die Zahl aus nur 4 Bits besteht kann man das 5. (bzw. das neue msb) ignorieren.

PDF    Sende Artikel als PDF an

Java 7: Unterstriche in Zahlen

Donnerstag, 15. Oktober 2009

In Java 7 wird es möglich sein, Unterstriche (engl. underscores) in Zahlen zu haben. Das soll lediglich die Lesbarkeit des Sources verbessern, hat also keinen Effekt auf das Programm.

int x1 = _52;  // This is an identifier, not a numeric literal.
int x2 = 5_2;  // OK. (Decimal literal)
int x2 = 52_;  // Illegal. (Underscores must always be between digits)
int x3 = 5_______2; // OK. (Decimal literal.)

int x4 = 0_x52;  // Illegal. Can't put underscores in the "0x" radix prefix.
int x5 = 0x_52;  // Illegal. (Underscores must always be between digits)
int x6 = 0x5_2;  // OK. (Hexadecimal literal)
int x6 = 0x52_;  // Illegal. (Underscores must always be between digits)
int x6 = 0x_;    // Illegal. (Not valid with the underscore removed)

int x7 = 0_52;   // OK. (Octal literal)
int x7 = 05_2;   // OK. (Octal literal)
int x8 = 052_;   // Illegal. (Underscores must always be between digits)

Hier sind noch ein paar Beispiele wo man sehen kann wie es die Lesbarkeit verbessert:

long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumbers = 999_99_9999L;
float monetaryAmount = 12_345_132.12;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xFFEC_DE5E;
long maxLong = 0x7fff_ffff_ffff_ffffL;
long alsoMaxLong = 9_223_372_036_854_775_807L;
double whyWouldYouEverDoThis = 0x1_.ffff_ffff_ffff_fp10_23;

Mehr Informationen: http://mail.openjdk.java.net/pipermail/coin-dev/2009-April/001628.html

PDF Drucker    Sende Artikel als PDF an