diff --git a/Makefile b/Makefile index 4764e56..e1db41f 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,19 @@ CC?=cc -all: - $(CC) -lm -o sqrt sqrt.c +all: bericht -check: all +check: sqrt ./sqrt +sqrt: sqrt.c + $(CC) -lm -o sqrt sqrt.c + debug: $(CC) -g -lm -o sqrt sqrt.c gdb ./sqrt -bericht: - latexmk -pdf bericht.tex; +graph.pdf: graph.dot + dot -Tpdf graph.dot > graph.pdf +bericht: graph.pdf sqrt + latexmk -pdf bericht.tex; diff --git a/bericht.tex b/bericht.tex new file mode 100644 index 0000000..aebb7d8 --- /dev/null +++ b/bericht.tex @@ -0,0 +1,100 @@ +\documentclass[a4paper,landscape]{scrartcl} +\usepackage[T1]{fontenc} +\usepackage{amsmath, amsthm, amssymb} +\usepackage[ansinew]{inputenc} + +\usepackage{listings} +\usepackage{tabularx} +\usepackage{graphicx} +\usepackage{color} + +\definecolor{mygreen}{rgb}{0,0.6,0} +\definecolor{mygray}{rgb}{0.5,0.5,0.5} +\definecolor{mymauve}{rgb}{0.58,0,0.82} + +\lstset{ % + backgroundcolor=\color{white}, % choose the background color; you must add \usepackage{color} or \usepackage{xcolor} + basicstyle=\footnotesize, % the size of the fonts that are used for the code + breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace + breaklines=true, % sets automatic line breaking + captionpos=b, % sets the caption-position to bottom + commentstyle=\color{mygreen}, % comment style + deletekeywords={...}, % if you want to delete keywords from the given language + escapeinside={\%*}{*)}, % if you want to add LaTeX within your code + extendedchars=true, % lets you use non-ASCII characters; for 8-bits encodings only, does not work with UTF-8 + frame=single, % adds a frame around the code + keepspaces=true, % keeps spaces in text, useful for keeping indentation of code (possibly needs columns=flexible) + keywordstyle=\color{blue}, % keyword style + language=C, % the language of the code + morekeywords={*,...}, % if you want to add more keywords to the set + numbers=left, % where to put the line-numbers; possible values are (none, left, right) + numbersep=5pt, % how far the line-numbers are from the code + numberstyle=\tiny\color{mygray}, % the style that is used for the line-numbers + rulecolor=\color{black}, % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. comments (green here)) + showspaces=false, % show spaces everywhere adding particular underscores; it overrides 'showstringspaces' + showstringspaces=false, % underline spaces within strings only + showtabs=false, % show tabs within strings adding particular underscores + stepnumber=2, % the step between two line-numbers. If it's 1, each line will be numbered + stringstyle=\color{mymauve}, % string literal style + tabsize=2, % sets default tabsize to 2 spaces + title=\lstname % show the filename of files included with \lstinputlisting; also try caption instead of title +} + +\begin{document} + +\subsection{Algorithmus} + +\begin{align} + x_{n+1}=\frac{x_n + \frac{a}{x_n}}{2} +\end{align} + +\subsection{Implementierung in C} +\begin{lstlisting} +typedef uint32_t u32; +void heron_sqrt(u32 *mem) { + int i; + for (i = 1; i <= mem[0]; i++){ + u32 s = mem[i]; + if (s > 1) { + // x_0 = (s + 1) / 2 + // without increment to avoid overflow for 0xffffffff + u32 x = s >> 1; + u32 old_x = x; + + while(1) { + // x_{n + 1} = (x_n + (s / x_n)) / 2 + x = (x >> 1) + ((s/x) >> 1); + if (old_x <= x) { + break; + } + old_x = x; + } + mem[i] = x; + } + } +} +\end{lstlisting} +\subsection{Speicherbelegung} + +Es wird angenommen, das jeder Speicherplatz 32 Bit breit ist. +Jedes Datenfeld wird als vorzeichenlose Festkommazahl interpretiert. + +\begin{tabularx}{\textwidth}{X|X} + Speicherplatz & Beschreibung \\\hline + MEM[0] & Anzahl der Operanden (n) \\ + MEM[1] & 1. Operand \\ + MEM[2] & 2. Operand \\ + $\ldots$ & $\dots$ \\ + MEM[N] & N. Operand +\end{tabularx} + +\subsection{Datenflussgraph} +\begin{figure}[ht] + \centering + \includegraphics[width=0.5\textwidth]{graph.pdf} + \label{fig1} +\end{figure} + +\subsection{Datenpfad} + +\end{document} diff --git a/graph.dot b/graph.dot index 907749e..aa092be 100644 --- a/graph.dot +++ b/graph.dot @@ -103,29 +103,3 @@ digraph heron { } } } - -// Listing -// void heron_sqrt(u32 *mem) { -// int i; -// for (i = 1; i <= mem[0]; i++){ -// u32 s = mem[i]; -// if (s > 1) { -// // x_0 = (s + 1) / 2 -// // without increment to avoid overflow for 0xffffffff -// u32 x = s >> 1; -// u32 old_x = x; -// -// while(1) { -// // x_{n + 1} = (x_n + (s / x_n)) / 2 -// x = (x >> 1) + ((s/x) >> 1); -// if (old_x <= x) { -// mem[i] = x; -// break; -// } -// old_x = x; -// } -// mem[i] = x; -// } -// } -//} - diff --git a/sqrt.c b/sqrt.c index 027f647..1ad27e5 100644 --- a/sqrt.c +++ b/sqrt.c @@ -20,7 +20,6 @@ void heron_sqrt(u32 *mem) { // x_{n + 1} = (x_n + (s / x_n)) / 2 x = (x >> 1) + ((s/x) >> 1); if (old_x <= x) { - mem[i] = x; break; } old_x = x;