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.