title: Is it ok that with fp:fast 3000.f/1000.f != 3.f?
body: <p>I'm using MSVC 2019 v16.11.12.</p>
  <p>When I tried compiling my code with <strong>/fp:fast</strong> instead of <strong>/fp:precise</strong>, my tests started failing.</p>
  <p>The simplest case is:</p>
  <pre><code>BOOST_AUTO_TEST_CASE(test_division) {
      float v = 3000.f;
      BOOST_TEST((v / 1000.f) == 3.f);
  }
  </code></pre>
  <p>Failing with result:</p>
  <blockquote>
  <p>error: in &quot;test_division&quot;: check (v / 1000.f) == 3.f has failed [3.00000024 != 3]</p>
  </blockquote>
  <p>I understand that <strong>/fp:fast</strong> can have worse floating-point precision in some cases; but, here, it seems excessive...</p>
  <p>How come it can't accurately divide 3000 by 1000?</p>
  <p>I understand that 0.1 + 0.2 is not 0.3, but here all the numbers are representable and the division returns exactly 3 with <strong>fp:precise</strong>.</p>
  <p>Is it possible that I have some other flag flipped which decreased the floating-point precision even more?</p>