It doesn&#x27;t have to lose performance; it&#x27;s just the default representation. For instance, if you have<p><pre><code>   a + 0.1
</code></pre>
where a is of binary floating point type, the 0.1 constant could denote an exact number. Because of the addition with a float, it gets coerced to the float&#x27;s type.  But that can be done at compile time. So effectively 0.1 is like a binary floating point constant in that situation.<p>But in another situation it remains exact, such as:<p><pre><code>  0.1 + 0.2
</code></pre>
this gets folded by the compiler at compile time, and uses exact math producing an exact 0.3.<p>Exactness is just the default.<p>If your language has rationals expressed as digs&#x2F;digs, you can imagine that those are used in their place:<p><pre><code>  a + 1&#x2F;10;

  1&#x2F;10 + 2&#x2F;10;
</code></pre>
In other words, suppose that 0.1 is just another &quot;spelling&quot; for 1&#x2F;10.<p>This will be no less performant than using integer constants in floating contexts, e.g:<p><pre><code>   double x;

   &#x2F;&#x2F; ...

   x += 1;  &#x2F;&#x2F; not slower than x += 1.0!</code></pre>