Z80 Routines:Math:Logarithm

From WikiTI
Revision as of 03:26, 29 May 2010 by Galandros (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


Introduction

Integer Log of base 2 =

; input: hl (16-bit integer unsigned)
; output: a = log2(hl) (rounded down and from -1 to 15) (8-bit integer signed)
log2:
	ld a,h
	or l
	ld a,-1
	ret z     ; return -1 if hl=0
	ld b,15   ; logarithm in base 2 is the number of significant bits for a integer, i.e. number of bits after the first 1 including it
log2loop:
	add hl,hl
	jr c,log2end
	djnz log2loop
log2end:
	ld a,b
	ret
 

Integer Log of base 10

Since log10=log2(hl)/log2(10). We can multiply by 1/log2(10).


 

Integer Log of base B

The same trick as above.

;unfinished
logB:
; input: hl = number
;	 b = base
; output: a = log hl base b
	
	ret