Also, be sure to note that the precision is 16 digits, not decimal places, as the following code demonstrates: 
  
 
(defun test ( n / i a b ) (setq i -1 a "")
 (while
     (/=
         (strlen (setq b (rtos n 2 (setq i (1+ i)))))
         (strlen a)
     )
     (print (setq a b))
 )
 (princ
     (strcat "\n\nMaximum Precision: "
         (itoa
             (- (strlen b) (cond ( (vl-string-position 46 b) ) ( (1- (strlen b)) )) 1)
         )
         " d.p."
     )
 )
 (princ)
)
 
  
 
_$ (test 1.12345678911234567891) ;; 20 d.p, 21 digits
"1" 
"1.1" 
"1.12" 
"1.123" 
"1.1235" 
"1.12346" 
"1.123457" 
"1.1234568" 
"1.12345679" 
"1.123456789" 
"1.1234567891" 
"1.12345678911" 
"1.123456789112" 
"1.1234567891123" 
"1.12345678911235" 
"1.123456789112346" 
Maximum Precision: 15 d.p.
 
  
 
_$ (test 123.12345678911234567891) ;; 20 d.p, 23 digits
"123" 
"123.1" 
"123.12" 
"123.123" 
"123.1235" 
"123.12346" 
"123.123457" 
"123.1234568" 
"123.12345679" 
"123.123456789" 
"123.1234567891" 
"123.12345678911" 
"123.123456789112" 
"123.1234567891123" 
Maximum Precision: 13 d.p.
 
  
 
_$ (test 1234567891.12345678911234567891) ;; 20 d.p, 30 digits
"1234567891" 
"1234567891.1" 
"1234567891.12" 
"1234567891.123" 
"1234567891.1235" 
"1234567891.12346" 
"1234567891.123457" 
Maximum Precision: 6 d.p.
 
  
Hence for a Real with integer part of length 16 digits: 
  
 
_$ (test 1234567891123456.12345678911234567891) ;; 20 d.p, 36 digits
"1234567891123456" 
Maximum Precision: 0 d.p.