# Z80 Routines:Math:Logarithm

From WikiTI

## Contents

# 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