<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><br id="lineBreakAtBeginningOfMessage"><div><br><blockquote type="cite"><div>Am 16.02.2024 um 15:34 schrieb Bernd Oppolzer via fpc-pascal <fpc-pascal@lists.freepascal.org>:</div><br class="Apple-interchange-newline"><div>

  
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  
  <div>
    <div class="moz-cite-prefix">Am 16.02.2024 um 08:32 schrieb Florian
      Klämpfl via fpc-pascal:<br>
    </div>
    <blockquote type="cite" cite="mid:D917A1EC-A5AA-4329-BAE9-B52723463A1D@freepascal.org"><span style="white-space: pre-wrap">Am 16.02.2024 um 08:23 schrieb Ern Aldo via fpc-pascal <a class="moz-txt-link-rfc2396E" href="mailto:fpc-pascal@lists.freepascal.org"><fpc-pascal@lists.freepascal.org></a>:</span>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap=""> Compile-time math needs to be as correct as possible. RUN-time math can worry about performance.
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">So you are saying when constant propagation is on, an expression should have a different result than with constant propagation off?
</pre>
    </blockquote><p>I don't know exactly, what you mean by constant propagation. <br>
    </p><p>But IMO, given this (sort of fictive) Pascal code snippet: <br>
    </p><p><br>
      const Xconst : single = 1440.0; </p><p>var y1, y2 : real; </p><p>y1 := 33.0 / 1440.0; </p></div></div></blockquote><blockquote type="cite"><div><div><p>y2 :=  33.0 / Xconst; <br></p></div></div></blockquote><div><blockquote type="cite"><p>the division in the first assignment (to y1) should be done at maximum precision, that is, <br>both constants should be converted by the compiler to the maximum available precision and <br>the division should be done (best at compile time) using this precision. <br></p></blockquote><div><p>Constant folding is an optimization technique, so the first expression could be also evaluated at run time in case of a simple compiler (constant folding is not something which is mandatory) which means that we have to use always full precision (what full means depends on the host and target platform thought) for real operations. So either: always full precision with the result all operations get bloated or some approach to assign a precision to real constants.</p><p>It gets even more hairy if more advanced optimization techniques are involved:</p></div></div>Consider</div><div><br></div><div>var</div><div>   y1,y2 : single;</div><div><br></div><div> y1 := 1440.0</div><div> y2 := 33.0 / y1;</div><div><br></div><div>When constant propagation and constant folding are on (both are optimizations), y2 can be calculated at compile time and everything reduced to one assignment to y2. So with your proposal the value of y2 would differ depending on the optimization level.</div><div><blockquote type="cite"><div><div><p>
    </p><p>in the second case, if the compiler supports constants of the
      reduced type (which I believe it does, </p><p>
      no matter how the syntax is), I find it acceptable if the
      computation is done using single precision, <br>
      because that's what the developer calls for. <br>
    </p><p>So probably the answer to your question is: yes. <br>
    </p><p>Kind regards <br>
    </p><p>Bernd <br>
    </p><p><br>
    </p><p><br>
    </p><p><br>
    </p><p><br>
    </p>
    <blockquote type="cite" cite="mid:D917A1EC-A5AA-4329-BAE9-B52723463A1D@freepascal.org">
      <pre class="moz-quote-pre" wrap=""></pre>
    </blockquote>
  </div>

_______________________________________________<br>fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org<br>https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal<br></div></blockquote></div><br></body></html>