See http://wws.princeton.edu/cgi-bin/byteserv.prl/~ota/disk3/1984/8420/842005.PDF