# float16/32: wrong number of digits?

4 messages
Open this post in threaded view
|

## float16/32: wrong number of digits?

 Hi everyone,I wondered how to express a numpy float exactly in terms of format, and found `%r` quite useful: `float(repr(a)) == a` is guaranteed for Python `float`s. When trying the same thing with lower-precision Python floats, I found this identity not quite fulfilled:```import numpyb = numpy.array([1.0 / 3.0], dtype=np.float16)float(repr(b[0])) - b[0]Out[12]: -1.9531250000093259e-06```Indeed,```bOut[6]: array([ 0.33325195], dtype=float16)``````repr(b[0])Out[7]: '0.33325'```When counting the bits, a float16 should hold 4.8 decimal digits, so `repr()` seems right. Where does the garbage tail -1.9531250000093259e-06 come from though?Cheers,Nico _______________________________________________ NumPy-Discussion mailing list [hidden email] https://mail.scipy.org/mailman/listinfo/numpy-discussion
Open this post in threaded view
|

## Re: float16/32: wrong number of digits?

 On Thu, Mar 9, 2017, 11:27 Nico Schlömer <[hidden email]> wrote:Hi everyone,I wondered how to express a numpy float exactly in terms of format, and found `%r` quite useful: `float(repr(a)) == a` is guaranteed for Python `float`s. When trying the same thing with lower-precision Python floats, I found this identity not quite fulfilled:```import numpyb = numpy.array([1.0 / 3.0], dtype=np.float16)float(repr(b[0])) - b[0]Out[12]: -1.9531250000093259e-06```Indeed,```bOut[6]: array([ 0.33325195], dtype=float16)``````repr(b[0])Out[7]: '0.33325'```When counting the bits, a float16 should hold 4.8 decimal digits, so `repr()` seems right. Where does the garbage tail -1.9531250000093259e-06 come from though?Even more troubling, the high precision numpy types - np.longdouble and its complex version - lose intimation when used with repr. The basic problem is (roughly) that all floating-point numbers are converted to python floats before printing. I put some effort into cleaning this up, but the code is messy (actually there are several independent code paths for converting numbers to strings) and the algorithms python uses to make repr work out nicely are nontrivial.AnneCheers,Nico _______________________________________________ NumPy-Discussion mailing list [hidden email] https://mail.scipy.org/mailman/listinfo/numpy-discussion _______________________________________________ NumPy-Discussion mailing list [hidden email] https://mail.scipy.org/mailman/listinfo/numpy-discussion