Those languages which print 0.30000000000000004 are doing something which is silly as a default: they are printing 17 decimal digits, out of a type that only supports 15.<p><pre><code>   $ txr -p &#x27;(+ .1 .2)&#x27;
   0.3
</code></pre>
Why is that? Here, the underlying type is the C double type. The printed representation is obtained according to a default precision. That default is taken from the C constant DBL_DIG.  For an IEE754 double, that constant is 15.<p>It is misleading to print more decimal digits out of a double than DBL_DIG; that is the constant which tells you how many decimal digits of precision double can reliably store. Thus I chose that constant as the default printing precision for floats: to give the programmer&#x2F;user the maximum realistic precision. That is to say, print the decimal digits which are <i>plausibly</i> there, and not any fictional ones.<p>17 decimal digits requires a 57 bit mantissa -- ceil(log 10 &#x2F; log 2) * 17). The 64 bit double type has only 52. So if you print 17, you&#x27;re &quot;making shit up&quot;.