See http://wws.princeton.edu/cgi-bin/byteserv.prl/~ota/disk2/1987/8733/8733.PDF