Monats-Archiv für Januar 2007

Arithmetik ohne Begrenzungen

Selbst wenn man nur einfache Probleme in Theoretischer Informatik, Zahlentheorie oder Diskreter Mathematik bearbeitet und durch Programme in C zu erschließen versucht, gelangt man schnell an die Grenzen der darstellbaren Wertebereiche für ganze Zahlen. Das Implementieren einer eigenen Bibliothek für große Zahlen ist zwar möglich, mit GMP (GNU Multi Precision Arithmic Library) gibt es aber bereits eine freie und gut gepflegte Implementierung.

Eine einfache, experimentelle Erkundung des Syracuse-Problems könnte so aussehen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
 
int main()
{
    int a;
 
    scanf("%d", &a);
 
    while (a != 1) {
	printf("%d ", a);
	a = syracuse(a);
    }
 
    printf("1\n");
 
    return 0;
}
 
int syracuse(int n)
{
    if (n % 2) {
	return 3 * n + 1;
    } else {
	return n / 2;
    }
}

Mit der GNU MP Bignum Library wird daraus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <gmp.h>
 
void mpz_syracuse(mpz_t n);
 
int main()
{
    mpz_t a;
    mpz_init(a);
 
    mpz_inp_str (a, NULL, 0);
 
    while ( mpz_cmp_si(a,1) ) {
	mpz_out_str (NULL, 0, a);
	printf("\n");
	mpz_syracuse(a);
    }
 
    printf("1\n");
 
    return 0;
}
 
void mpz_syracuse(mpz_t n)
{
    if (mpz_divisible_ui_p(n,2)) {
	mpz_divexact_ui (n, n, 2);
    } else {
	mpz_mul_ui (n, n,3);
	mpz_add_ui (n, n, 1);
    }
}

Damit kann man dann auch für sehr große natürliche Zahlen die Zahlenfolge bestimmen, kompiliert wird wie gewohnt, allerdings muss man mit -lgmp linken.

syracuse

Photos mit Flickr

Ich habe mich heute bei Flickr angemeldet. Meine Photoseite findet man unter flickr.com/photos/aquo und natürlich gibt es auch einen Photo-Feed. Die drei neuesten Photos werden als Vorschau in der Randspalte angezeigt, dazu benutze ich FlickrRSS für Wordpress.

AVR Butterfly

Der AVR Butterfly ist eine Evaluationsumgebung für den Mikroprozessor ATmega169 von Atmel.

avrbutterfly_front

Die Ausstattung an Schnittstellen und Sensor ist für so ein kleines und günstiges System recht beachtlicht. Für um die 20 Euro bekommt man ein 6-stelliges LCD, einen 4-Wege-Taster mit Druckknopf, 512 kByte Flash-Speicher, Licht- und Temperatursensor, einen Piezo-Schallwandler und einen Zugang über serielle Schnittstelle (mit Pegelwandler auf dem Board). Als weitere Kommunikationspfade mit dem System kann man JTAG, SPI und I2C nutzen. Zudem arbeitet der Butterfly sehr stromsparend und ist mit einer Lithium-Batterie autark spannungsversorgt.

Das System ist in C programmierbar, einen entsprechenden Compiler und Werkzeuge zur Datenübertragung auf das System gibt es auch für Linux.

Chemnitzer Spielenacht

Am 12.01.2007 findet in Chemnitz die 3. Chemnitzer Spielenacht statt. Los geht es, bei freiem Eintritt, um 18 Uhr in der Mensa der TU Chemnitz. An diesem Abend sind alle bekannten und weniger bekannten Spiele auszuleihen, die auf dem Spielemarkt erhältlich sind. Es finden vier Turniere statt, Turnierspiele sind: “Siedler von Catan”, “Carcassonne”, “Mensch ärgere dich nicht” und “6 nimmt”.