<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hello Frederico,</p>
    <p>Like Christophe, I am not sure this has anything to do with the
      implementation of sin().<br>
      It seems to be a known limitation of numerical calculations using
      floating numbers.<br>
      In particular, even with en hypothetical ideal value of %pi,
      because of the conversion to a double, %pi*1e15 is converted to
      the nearest available double and this "shift" or error as compared
      to the ideal infinitely-precise value is increasing with the size
      of your number.<br>
      Thus you make a x1e15 bigger error when using "%pi*1e15" than when
      using "%pi".<br>
      As Christophe as said, there is not much you can do, apart from
      resorting to symbolic calculation (what Alpha does).</p>
    <p>You can see that by using nearfloat to get the distance between
      two doubles:</p>
    <blockquote>
      <p>nearfloat("succ", %pi)-%pi<br>
        Â ans  =   4.441D-16<br>
        nearfloat("succ", %pi*1e15)-%pi*1e15<br>
        Â ans  =   0.5<br>
      </p>
    </blockquote>
    <p>As I said, the error on the sin() argument is getting x1e15
      bigger!<br>
    </p>
    <p>I'm sorry if my explanation of floating point numbers is not
      really good.<br>
      This one was a revelation for me: <a
        class="moz-txt-link-freetext"
        href="https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html">https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html</a>
      .<br>
      It helped me understand why it's usually a good idea to use
      "reduced units" for your calculations (ie keep everything close to
      1 when possible).</p>
    <p>I hope it helps,</p>
    <p>Cheers,<br>
    </p>
    Antoine
    <div class="moz-cite-prefix">On 05/01/2021 09:19, Federico Miyara
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:612f5b66-b72e-5194-5bd3-a37f37b84aba@fceia.unr.edu.ar">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <br>
      <font face="Courier New">Dear all,<br>
        <br>
        In order to test the FFT on a periodic signal whose period is an
        exact submultiple of the FFT length I found a frequency fo
        satisfying this for the chosen sample rate and window length,
        and generated the following signal:<br>
        <br>
        x = sin(2*%pi*fo*t); <br>
        <br>
        where t is a time vector. This should be a perfectly periodic
        discrete signal but it isn't because the sin() function has a
        (virtually) exact period of pi, while %pi is exact to 16 digits
        only.<br>
        <br>
        For instance, we have (23 digits shown)<br>
        <br>
        --> sin(%pi)<br>
        Â ans  =<br>
        Â Â  0.0000000000000001224647<br>
        <br>
        --> sin(1e10*%pi)<br>
        Â ans  =<br>
        Â  -0.0000022393627619559233<br>
        <br>
        --> sin(1e15*%pi)<br>
        Â ans  =<br>
        Â  -0.2362090532517409080526<br>
        <br>
        The Wolfram Alpha site yields the correct value 0 in all cases
        (using their own pi).<br>
        <br>
        Questions:<br>
        <br>
        1) How is the sin() function extended to very large values of
        the argument? My first guess would be to compute a quarter cycle
        using Taylor and then extend it by symmetry and periodicity, but
        with which period? The best approximation available is 2*%pi. Or
        it is possible to use extended precision internally?<br>
        <br>
        2) Is there a way to get a periodic discrete sine other than
        extending it periodically with the desired period?<br>
        Wouldn't this create a slight glitch at the frontier between
        cycles?<br>
        <br>
        Regards,<br>
        <br>
        Federico Miyara Â  <br>
      </font>
      <div id="DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2"><br>
        <table style="border-top: 1px solid #D3D4DE;">
          <tbody>
            <tr>
              <td style="width: 55px; padding-top: 18px;"><a
href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient"
                  target="_blank" moz-do-not-send="true"><img
src="https://ipmcdn.avast.com/images/icons/icon-envelope-tick-round-orange-animated-no-repeat-v1.gif"
                    alt="" style="width: 46px; height: 29px;"
                    moz-do-not-send="true" width="46" height="29"></a></td>
              <td style="width: 470px; padding-top: 17px; color:
                #41424e; font-size: 13px; font-family: Arial, Helvetica,
                sans-serif; line-height: 18px;">Libre de virus. <a
href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient"
                  target="_blank" style="color: #4453ea;"
                  moz-do-not-send="true">www.avast.com</a> </td>
            </tr>
          </tbody>
        </table>
        <a href="#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2" width="1"
          height="1" moz-do-not-send="true"> </a></div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:users@lists.scilab.org">users@lists.scilab.org</a>
<a class="moz-txt-link-freetext" href="http://lists.scilab.org/mailman/listinfo/users">http://lists.scilab.org/mailman/listinfo/users</a>
</pre>
    </blockquote>
  </body>
</html>