See http://wws.princeton.edu/cgi-bin/byteserv.prl/~ota/disk3/1980/8023/8023.PDF