Z80 Routines:Math:Logarithm

From WikiTI
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,16
	scf
log2loop:
	adc	hl,hl
	dec	a
	jr	nc,log2loop
	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