From 625baed591a15f267448e9d6b8a803506f5e3da5 Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:44:54 +0200 Subject: [PATCH 1/8] M5: add BCD fixed-point and IEEE 754 --- course/no/15-bcd.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 course/no/15-bcd.md 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? From bd3b979702e7de13ea520ae9453209eac66f7e4a Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:44:56 +0200 Subject: [PATCH 2/8] M5: add BCD fixed-point and IEEE 754 --- course/no/16-fixed-point.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 course/no/16-fixed-point.md 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. From b57d817802e28feacc9ae72b858eb2888fd6f6b0 Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:44:59 +0200 Subject: [PATCH 3/8] M5: add BCD fixed-point and IEEE 754 --- course/no/17-floating-point.md | 45 ++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 course/no/17-floating-point.md 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? From 974fba5164ae0e19a5aea81cd7d96072be719511 Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:45:01 +0200 Subject: [PATCH 4/8] M5: add BCD fixed-point and IEEE 754 --- course/en/15-bcd.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 course/en/15-bcd.md 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. From 966a32ed29c925d03e41cb1b7f32ff82469a32d1 Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:45:09 +0200 Subject: [PATCH 5/8] M5: add BCD fixed-point and IEEE 754 --- course/en/16-fixed-point.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 course/en/16-fixed-point.md 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. From b5cef925cbf5382186bac47155c8ea010de8484c Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:45:12 +0200 Subject: [PATCH 6/8] M5: add BCD fixed-point and IEEE 754 --- course/en/17-floating-point.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 course/en/17-floating-point.md 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? From 05880c74a8b770835b9e5c0398e7c04dfa1f1d52 Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:45:15 +0200 Subject: [PATCH 7/8] M5: add BCD fixed-point and IEEE 754 --- exercises/no/06-numeriske-formater.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 exercises/no/06-numeriske-formater.md 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? From 617d9a3620fc2b918e849c30582f386db867b626 Mon Sep 17 00:00:00 2001 From: pos Date: Mon, 28 Sep 2026 11:45:17 +0200 Subject: [PATCH 8/8] M5: add BCD fixed-point and IEEE 754 --- solutions/no/06-numeriske-formater.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 solutions/no/06-numeriske-formater.md 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.