diff --git a/course/en/15-bcd.md b/course/en/15-bcd.md new file mode 100644 index 0000000..12430a8 --- /dev/null +++ b/course/en/15-bcd.md @@ -0,0 +1,27 @@ +# BCD — Binary-Coded Decimal + +BCD encodes decimal digits individually rather than representing the entire number as one binary integer. + +## PREDICT + +How can decimal 42 be stored when each decimal digit receives four bits? + +## STEP + +Packed BCD gives each digit one nibble: `42 -> 0100 0010₂ -> 0x42`. Ordinary binary 42 is instead `00101010₂ = 0x2A`. + +Only nibble values 0–9 are normally valid decimal digits. Unpacked BCD commonly gives each digit a whole byte. + +BCD has been useful in calculators, clocks, counters, financial systems and historical computers where decimal digits need direct preservation. + +## OBSERVE + +A byte `0x42` can mean ordinary integer 66 or packed-BCD decimal 42. The format supplies the meaning. + +## EXPLAIN + +BCD reinforces a central theme: bits need a representation rule before they become a number. + +## Check yourself + +Encode 1987 as packed BCD and state its storage size. diff --git a/course/en/16-fixed-point.md b/course/en/16-fixed-point.md new file mode 100644 index 0000000..6f7b340 --- /dev/null +++ b/course/en/16-fixed-point.md @@ -0,0 +1,31 @@ +# Fixed-point and Q formats + +Fixed-point represents fractional values using an implied, fixed binary-point position. + +## PREDICT + +With four integer bits and four fractional bits, what does `00111000₂` represent? + +## STEP + +Interpreted as `0011.1000₂`, the value is 3.5. The stored integer is 56 and four fractional bits imply division by (2^4=16). + +With (f) fractional bits, resolution is (2^{-f}). + +Two's-complement signed integers can use the same scaling rule for signed fixed-point values. + +## Tradeoffs + +Fixed-point offers predictable resolution and efficient arithmetic on systems without fast floating-point hardware, but software must manage scaling, range and overflow explicitly. + +## OBSERVE + +No physical binary-point symbol is stored. Its location belongs to the format definition. + +## EXPLAIN + +Fixed-point is scaled integer arithmetic, directly connecting fractional numbers to integer width and overflow. + +## Check yourself + +What is the resolution with eight fractional bits? Interpret stored integer 384 using that scale. diff --git a/course/en/17-floating-point.md b/course/en/17-floating-point.md new file mode 100644 index 0000000..0f8ad0b --- /dev/null +++ b/course/en/17-floating-point.md @@ -0,0 +1,33 @@ +# Floating-point and IEEE 754 + +Floating-point stores a significand together with an exponent so the binary point can effectively move. + +## PREDICT + +How can the same 32-bit format cover both very large and very small magnitudes? + +## STEP + +IEEE 754 binary32 contains one sign bit, eight exponent bits and 23 explicit fraction bits. Normal values conceptually follow `(-1)^sign × significand × 2^exponent`; the exponent uses a bias and the leading one of a normal binary significand is implicit. + +IEEE 754 also defines signed zeros, infinities, NaNs and subnormal values. + +## Why 0.1 + 0.2? + +One tenth has no finite binary fractional expansion, just as one third has no finite decimal expansion. It must be rounded to a representable binary floating-point value. Arithmetic on rounded operands can therefore differ slightly from ideal decimal arithmetic. + +## Precision and range + +Exponent bits provide range while significand bits provide precision. Floating-point is a controlled compromise, not arbitrary-precision real arithmetic. + +## OBSERVE + +A floating-point bit pattern cannot be interpreted as an ordinary integer while preserving its numerical meaning; the field structure defines the representation. + +## EXPLAIN + +IEEE 754 standardizes behavior, but programs still need to account for rounding, special values and comparisons. + +## Check yourself + +Why is exact floating-point equality often more subtle than integer equality? diff --git a/course/no/15-bcd.md b/course/no/15-bcd.md new file mode 100644 index 0000000..aef185b --- /dev/null +++ b/course/no/15-bcd.md @@ -0,0 +1,35 @@ +# BCD – Binary-Coded Decimal + +BCD lagrer desimalsifre som binære koder i stedet for å representere hele tallet som ett binært heltall. + +## PREDICT + +Hvordan kan desimaltallet 42 lagres dersom hvert desimalsiffer får fire bit? + +## STEP + +I packed BCD bruker hvert desimalsiffer én nibble: + +`42₁₀ -> 0100 0010₂ -> 0x42` + +Dette er ikke det samme som vanlig binær representasjon av 42, som er `00101010₂ = 0x2A`. + +Bare nibbleverdiene 0–9 er gyldige desimalsifre; A–F brukes normalt ikke som BCD-sifre. + +I unpacked BCD bruker hvert siffer typisk en hel byte, mens packed BCD legger to sifre i én byte. + +## Hvorfor BCD? + +BCD har vært viktig i kalkulatorer, klokker, tellere, økonomisystemer og eldre maskiner fordi desimalsifre kan bevares direkte og vises uten binær/desimal avrundingsproblematikk. + +## OBSERVE + +Hexdumpen `42` kan bety vanlig binær verdi 66 eller packed BCD-verdi 42. Formatkontekst avgjør. + +## EXPLAIN + +BCD demonstrerer igjen hovedideen i kurset: samme bitmønster kan ha forskjellige betydninger under forskjellige representasjonsregler. + +## Sjekk deg selv + +Skriv 1987 som packed BCD. Hvor mange byte kreves? diff --git a/course/no/16-fixed-point.md b/course/no/16-fixed-point.md new file mode 100644 index 0000000..4dab3be --- /dev/null +++ b/course/no/16-fixed-point.md @@ -0,0 +1,37 @@ +# Fixed-point og Q-format + +Fixed-point representerer brøktall med en implisitt fast plassering av binærpunktet. + +## PREDICT + +Hvis et 8-bit mønster har fire heltallsbit og fire brøkbit, hvilken verdi har `00111000₂`? + +## STEP + +I et unsigned Q4.4-lignende format har de fire nederste bitene vektene (2^{-1},2^{-2},2^{-3},2^{-4}). + +`0011.1000₂ = 3 + 1/2 = 3.5`. + +Det lagrede heltallet er 56. Skalafaktoren er (2^4=16), så den virkelige verdien er `56 / 16 = 3.5`. + +Med (f) brøkbit er oppløsningen (2^{-f}). + +## Signed fixed-point + +Toerkomplement kan kombineres med et fast binærpunkt. Bitmønsteret tolkes først som et signed heltall og skaleres deretter med (2^{-f}). + +## Fordeler og begrensninger + +Fixed-point gir forutsigbar presisjon og kan være effektivt på mikrokontrollere uten rask floating-point-maskinvare. Til gjengjeld må programmereren holde kontroll på skalering, range og overflow. + +## OBSERVE + +Binærpunktet lagres ikke som et eget symbol. Formatdefinisjonen forteller hvor det ligger. + +## EXPLAIN + +Fixed-point er egentlig heltallsaritmetikk med en avtalt skala. Det gjør forbindelsen til bitbredde, toerkomplement og overflow svært tydelig. + +## Sjekk deg selv + +Hva er oppløsningen med åtte brøkbit? Tolk heltallsverdien 384 med åtte brøkbit. diff --git a/course/no/17-floating-point.md b/course/no/17-floating-point.md new file mode 100644 index 0000000..1092415 --- /dev/null +++ b/course/no/17-floating-point.md @@ -0,0 +1,45 @@ +# Floating-point og IEEE 754 + +Floating-point lar binærpunktet «flyte» ved å lagre en signifikand sammen med en eksponent. + +## PREDICT + +Hvorfor kan et svært stort og et svært lite tall begge representeres i samme 32-bit format? + +## STEP + +IEEE 754 binary32 bruker 32 bit fordelt på: + +- 1 signbit +- 8 eksponentbit +- 23 eksplisitte fraction-bit + +For normale verdier representerer feltet i prinsippet + +`(-1)^sign × significand × 2^exponent`. + +Eksponenten lagres med bias, og den ledende 1-biten i normale binære verdier er implisitt. + +Standarden definerer også spesialverdier som +0, −0, positive/negative infinity, NaN og subnormale tall. + +## Hvorfor 0.1 + 0.2? + +Brøken 1/10 har ingen endelig binær brøkrepresentasjon, på samme måte som 1/3 ikke har en endelig desimalrepresentasjon. Verdien må derfor avrundes til nærmeste representerbare floating-point-verdi. + +Når flere slike avrundede verdier brukes i aritmetikk, kan resultatet avvike litt fra det matematiske desimaltallet. + +## Presisjon og range + +Flere eksponentbit gir stor range; flere signifikandbit gir større presisjon. Floating-point gir derfor et kompromiss, ikke «vilkårlig presise reelle tall». + +## OBSERVE + +Et floating-point-bitmønster kan ikke tolkes som et vanlig heltall og forventes å beholde samme numeriske verdi. Feltstrukturen definerer representasjonen. + +## EXPLAIN + +IEEE 754 gjør floating-point portabelt og veldefinert, men programmer må fortsatt forstå avrunding, spesialverdier og sammenligning. + +## Sjekk deg selv + +Hvorfor er testing av floating-point-likhet ofte mer komplisert enn testing av heltallslikhet? diff --git a/exercises/no/06-numeriske-formater.md b/exercises/no/06-numeriske-formater.md new file mode 100644 index 0000000..4be3a22 --- /dev/null +++ b/exercises/no/06-numeriske-formater.md @@ -0,0 +1,10 @@ +# Øvelser: BCD, fixed-point og floating-point + +1. Skriv 2026 som packed BCD. +2. Forklar hvorfor byte `0x99` kan bety 153 som binært heltall, men 99 som BCD. +3. Tolk `01011000₂` som unsigned fixed-point med fire brøkbit. +4. Hva er minste steg med 10 brøkbit? +5. Et Q-format lagrer heltallsverdien −320 med åtte brøkbit. Hva er den skalerte verdien? +6. Nevn de tre hovedfeltene i IEEE 754 binary32. +7. Hvorfor kan ikke 0.1 representeres eksakt med en endelig binær brøk? +8. Hva brukes NaN til? diff --git a/solutions/no/06-numeriske-formater.md b/solutions/no/06-numeriske-formater.md new file mode 100644 index 0000000..dba9fab --- /dev/null +++ b/solutions/no/06-numeriske-formater.md @@ -0,0 +1,10 @@ +# Løsninger: BCD, fixed-point og floating-point + +1. `20 26` i packed BCD, altså nibblene 2,0,2,6. +2. Vanlig binært `0x99 = 9×16+9 = 153`; BCD tolker nibblene separat som desimalsifrene 9 og 9. +3. `0101.1000₂ = 5.5`. +4. (2^{-10}=1/1024). +5. (-320/256=-1.25). +6. Sign, eksponent og fraction/signifikandfelt. +7. Nevneren 10 inneholder faktoren 5; en endelig base-2-brøk kan bare uttrykke brøker som etter forkorting har en nevner som er en toerpotens. +8. NaN representerer blant annet udefinerte eller ugyldige floating-point-resultater og kan propagere gjennom videre beregninger.