sobota, 12 listopada 2011

Metaprogramowanie - implementacja dużych liczb całkowitych (część 2)

Na początku listopada zapowiedziałem, że przedstawię metaprogram, który policzy liczbę 100!. Wszystko oczywiście już na etapie kompilacji. W części 1 stworzony został zalążek biblioteki BigInteger, umożliwiającej dodawanie dużych liczb całkowitych. Dziś rozszerzę tę bibliotekę o możliwość mnożenia.

Zaczniemy od napisania metafunkcji, która mnoży dowolną dużą liczbę całkowitą przez dowolną liczbę jednocyfrową. Zostanie ona później wykorzystania do mnożenia dowolnych dwóch dużych liczb całkowitych.

sobota, 5 listopada 2011

Serwer FTP

Dzięki uprzejmości kolegi, Michała, który użyczył mi trochę miejsca na swoim serwerze, będę do postów załączał całe pliki zawierające omawiany przeze mnie kod. Zaktualizowałem też wcześniejsze wpisy (linki do plików znajdują się na samym dole).

Zapraszam na blog Michała. :)

wtorek, 1 listopada 2011

Metaprogramowanie - implementacja dużych liczb całkowitych (część 1)

Ostatnio przypomniało mi się zadanie z pierwszego semestru studiów. Był to raczej klasyk dla uczących się języka C/C++: implementacja dużych liczb całkowitych. W moim przypadku chodziło konkretnie o policzenie liczby 100!. Prowadzący zaproponował nawet mały konkurs, polegający na jak najefektywniejszej implementacji arytmetyki (zwyciężyć miała osoba, której program najszybciej obliczy wynik), jednak jeśli mnie pamięć nie myli, to do niego nie doszło. ;)

Tak sobie pomyślałem, że można by się tu pokusić o małe oszustwo i policzyć wynik już na etapie kompilacji, a po uruchomieniu programu tylko go wyświetlić. Tego rodzaju programowanie nazywa się metaprogramowaniem.

Mając dziś trochę wolnego czasu, zacząłem pisać bibliotekę do obliczeń na dużych liczbach całkowitych wykonywanych w trakcie kompilacji programu. Ponieważ całość implementacji jest zbyt duża na pojedynczy wpis na blogu, podzielę ją na kilka części i omówię osobno. Końcowym efektem będzie obliczenie liczby 100! w trakcie kompilacji.