#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") #align(center)[ #text(size: FONT_SIZE * 2, weight: "bold")[#underline[exercise 0]] ] these are my solutions to exercise set 1 of TDT4200. this document was created using #link("https://typst.app/")[#text(blue.darken(5%))[typst]]. #v(42pt) #outline(title: none) #v(42pt) = macros macros define programmer-friendly syntax that is preprocessed at compile time, thus incurring no performance penality. they constitute a fundamental part in meta programming (see lisp). excessive use of macros may obfuscate semantics, but can often be used to make the code clearer to read. in this case, it helps simplify the indexing of the buffers for easier to read calculations. = boundary conditions the boundary condition could be changed from reflection to wrapping around. this can be achieved by setting the left boundary to be the right-most point, and the right boundary to be the left-most point. = no memory if you don't allocate memory in T1, the buffers will be unallocated and you will get indexing errors as you try to access the buffers using the predefined macros. basically, you segfault. = `float const *a` vs `float *const b` - `float const *a` is a constant pointer to some memory address, assigned to the constant name `a`. since `a` is constant, it cannot be reassigned. - `float *const b` is a pointer to some constant value, assigned to the variable `b`. since `b` points to a constant, the dereferenced value cannot be changed. these are not the same.