/* Square root without multiplication or division */ const half_dw = 8 : 4; const dw = half_dw << 1; const sq = (1 << (dw - 2)) : dw; void main(chan (in) STDIN : dw, chan (out) STDOUT : dw) { int a, p, q, r; int i; while (1) { STDIN ? a; p, q, r = 0, 0, sq; i = half_dw; do { if (p + q + r .<=. a) i, r, q, p = i - 1, r >> 2, (q >> 1) + r, p + q + r; else i, r, q = i - 1, r >> 2, (q >> 1); } while (i != 0); STDOUT ! q; } }