"40 bitů bylo pravděpodobně zvoleno z toho důvodu, že všech pět univerzálních pracovních registrů má dohromady přesně tuto šířku"
- Tohle je podle mne hodně vedle. Řekl bych že hlavním důvodem byl fakt, že Microsoftí Basic v té době používal 40-bitový formát a ten byl považován za de facto standard. Původní FP formát pro Altair byl 32 bitový, nicméně 24 bitů mantisy stačí na zhruba 6 decimálních čísel a to se rychle ukázalo jako nedostačující. Microsoft šel cestou nejmenšího odporu a rozšířil mantisu na 32 bitů (zhruba 9 decimálních čísel).
Při implementaci FP vás netrápí ani tak celková velikost čísla, ale velikost mantisy, protože právě tu je třeba normalizovat, denormalizovat, násobit a dělit.
Krásná ukázka silné stránky Z80 je právě násobení dvou 32 bitových mantis v ROM ZX Spectra
MLT_LOOP:
jr nc, NO_ADD
add hl, de
exx
add hl, de
exx
NO_ADD:
exx
rr h
rr l
exx
rr h
rr l
STRT_MLT:
exx
rr b
rr c
exx
rr c
rra
djnz MLT_LOOP
Je to klasický shift-add algoritmus, nicméně s pár chytrýmy detaily:
a) shift doprava umožňuje příčíst bity, které přetekly z dolních 32 bitů výsledku do horních 32 bitů, aniž by se počítalo se 64 bitovými čísly
b) využití stínových registrů, celkem rutina pracuje se třemi 32bitovými hodnotami, H'L'HL je výsledkem, B'C'CA je násobitel, D'E'DE je násobenec a jedním osmibitovým počítadlem.
c) hezká mikrooptimalizace v případě prohození B a A registru, kdy je A rychlejší při bitové rotaci a naopak B je díky instrukci vhodné jako počítadlo.