ex0: theory document
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -54,3 +54,4 @@ dkms.conf
|
||||
|
||||
*.zip
|
||||
*.pdf
|
||||
*.png
|
||||
|
@@ -8,3 +8,6 @@ run:
|
||||
show:
|
||||
make run
|
||||
feh after.bmp
|
||||
|
||||
convert:
|
||||
magick after.bmp after.png # for showing image in pdf
|
||||
|
126
exercise0/main.typ
Normal file
126
exercise0/main.typ
Normal file
@@ -0,0 +1,126 @@
|
||||
#import "@preview/cetz:0.3.2";
|
||||
#import "@preview/cetz-plot:0.1.1": plot
|
||||
#import "@preview/physica:0.9.4": *
|
||||
#import "@preview/plotsy-3d:0.1.0": plot-3d-parametric-surface
|
||||
#import "@preview/fletcher:0.5.4" as fletcher: diagram, edge, node
|
||||
|
||||
#set page(paper: "a4", margin: (x: 2.6cm, y: 2.8cm), numbering: "1 : 1")
|
||||
#set par(justify: true, leading: 0.52em)
|
||||
|
||||
#let FONT_SIZE = 18pt;
|
||||
#set text(font: "FreeSerif", size: FONT_SIZE, lang: "us")
|
||||
#show math.equation: set text(font: "Euler Math", size: (FONT_SIZE * 1.0), lang: "en")
|
||||
|
||||
#set heading(numbering: none)
|
||||
#show heading.where(level: 1): it => {
|
||||
rect(inset: FONT_SIZE / 2)[#it]
|
||||
}
|
||||
|
||||
// Dracula palette
|
||||
#let bg = rgb("#282a36")
|
||||
#let fg = rgb("#f8f8f2")
|
||||
#let sec = rgb("#44475a")
|
||||
|
||||
// Inline (aligned to surrounding text)
|
||||
#show raw.where(block: false): it => box(
|
||||
fill: sec,
|
||||
inset: (x: 5pt, y: 3pt, top: 3pt), // extra top inset
|
||||
baseline: 2.75pt, // lowers box
|
||||
radius: 2.5pt,
|
||||
text(fill: fg, size: 0.88em, it),
|
||||
)
|
||||
|
||||
// Block (unchanged)
|
||||
#show raw.where(block: true): it => block(
|
||||
fill: bg,
|
||||
inset: 10pt,
|
||||
radius: 4pt,
|
||||
text(fill: fg, font: "Fira Code", it),
|
||||
)
|
||||
|
||||
|
||||
#align(center)[
|
||||
#text(size: FONT_SIZE * 2, weight: "bold")[#underline[exercise 0]]
|
||||
]
|
||||
|
||||
these are my solutions to the first (optional) exercise set of TDT4200.
|
||||
|
||||
i recommend using a PDF-reader like
|
||||
#link("https://wiki.archlinux.org/title/Zathura")[#text(blue.darken(5%))[zathura]],
|
||||
for no particular reason other than that it is cool.
|
||||
|
||||
this document was created using
|
||||
#link("https://typst.app/")[#text(blue.darken(5%))[typst]].
|
||||
|
||||
#v(42pt)
|
||||
|
||||
#outline(title: none)
|
||||
|
||||
#v(42pt)
|
||||
|
||||
|
||||
= how to run my code
|
||||
|
||||
the project utilizes
|
||||
#link("https://nixos.org/")[#text(blue.darken(5%))[nix]]
|
||||
to manage dependencies.
|
||||
|
||||
with it (and with
|
||||
#link("https://wiki.nixos.org/wiki/Flakes")[#text(blue.darken(5%))[flakes]]
|
||||
enabled), you can simply run `nix develop` to enter a development shell with the
|
||||
necessary dependencies, as specified in `flake.nix` and `flake.lock`. in this
|
||||
shell you can build the bmp-image using `make run` or to see it immediately,
|
||||
using
|
||||
#link("https://wiki.archlinux.org/title/Feh")[#text(blue.darken(5%))[feh]],
|
||||
you can run `make show`.
|
||||
|
||||
#v(100%)
|
||||
|
||||
= theory
|
||||
|
||||
== 1) what is the purpose of a Makefile?
|
||||
|
||||
a Makefile is like a shell-script that performs some pre-defined tasks. it is
|
||||
particularly useful as a *build tool* for complex compilation pipelines in
|
||||
development environments relying on such compiled languages like C.
|
||||
|
||||
`make show` is an example of a neat short-hand to compile and run my program,
|
||||
but also finally displaying the image result to me using the lightweight CLI
|
||||
feh.
|
||||
|
||||
== 2) what is a pointer in C?
|
||||
|
||||
a *pointer* in C is a memory address equipped with a primitive type, determining
|
||||
the semantics of *pointer arithmetic*, i.e. when you increment the pointer. for
|
||||
example, if you increment a pointer with a type of size 8 bytes, it will jump to
|
||||
the memory address 8 bytes forward. a *void pointer* is a true wildcard pointer,
|
||||
having 'no type', thus being able to point to any memory, disregarding
|
||||
alignment.
|
||||
|
||||
== 3) what does the compile flag `-O3` do?
|
||||
|
||||
GCC, like most compilers, have lots of flags that alter their behavior. given
|
||||
the age of C and the amount of clever people in the world that have dedicated
|
||||
time to crafting a perfect compiler, GCC is capable of analyzing the
|
||||
code to perform optimizations. `gcc -O3 source.c` means to compile a source file
|
||||
with *aggressive optimizations*. examples of this could be unrolling loops,
|
||||
recognizing patterns or using more specialized (and faster) instructions (if
|
||||
available).
|
||||
|
||||
note that there have been examples of compiler optimizations introducing weird
|
||||
bugs (i think), due to slight alterings of internal semantics.
|
||||
|
||||
== 4) how do you pass a value by reference?
|
||||
|
||||
passing a value by reference is the preferred way of handling data transfer in
|
||||
C, as opposed to other languages, where data may be passed to a function as
|
||||
a *pure copy*. copying memory is expensive, both time-wise and space-wise. it
|
||||
scales linearly, so thus if you have millions of data points, and you wish to
|
||||
pass it around lots, copying it each time could be considered unoptimal. that's
|
||||
why you wish to refer to your data using pointers, also known as *references*.
|
||||
|
||||
= じゃああ、またね。
|
||||
|
||||
#align(center)[
|
||||
#image("after.png", width: 80%)
|
||||
]
|
Reference in New Issue
Block a user