what's wrong with my drawCircle function, it looks like i'm drawing vertical line.

my code:
function void drawCircle(int cx, int cy, int r) {
        var int dx, dy;
        var int r_squared;
        if ((cx>511)|(cy>255)|(r>181)) {  
            do Sys.error(12);  
        }  
        let dy = -r;
        let r_squared = r*r;
        while( ~(dy > r) ) {
            let dx = Math.sqrt(r_squared-(dy*dy));
            do Screen.drawHorizontal( cx-dx, cx+dx, cy+dy );
            let dy = dy + 1;
        }
        return;
    }