On 05.06.2024 13:09, Matt Barber wrote:
Hi Christof,

Thanks!

Don't forget the guard point, which could also be set explicitly to 1.0
True! Thanks!

christof


Matt

On Wed, Jun 5, 2024, 4:29 AM Christof Ressi <[email protected]> wrote:

    Hi Matt,

    thanks for chiming in!


    Christof:

        This should ensure that the table is symmetric, unless the
        underlying cos() function is broken :)


    I think the underlying cos() function is dependent on
    architecture and compiler?
    Yes. cos() is a library function, so the output depends on the
    particular C library implementation, the compiler and the also
    architecture. I would still expect it to be (reasonably)
    symmetric, but I haven't really checked.
    Even with the new cosine table, on my machine the zero crossings
    have a (very tiny) residual, so it's sitting at a very small DC
    offset.

    You're right, I didn't consider the peaks and zero-crossings! The
    values of 1/2 PI, PI and 3/2 PI cannot be accurately represented
    as floating point numbers, so the result of cos() may be a bit off.

    I think we should explicitly set these points:

    cos_newtable[COSTABLESIZE / 4] = 0.0;               /* 1/2 PI */
    cos_newtable[COSTABLESIZE / 2] = -1.0;              /* PI */
    cos_newtable[COSTABLESIZE / 4 * 3] = 0.0;   /* 3/2 PI */

    @Miller: what do you think? IMO we should make the cos table as
    good as we can, so we won't have any regrets :)

    The rest of the function looks symmetric, though, and certainly
    much, much better than the previous one.

    Thanks for checking!

    Christof

    _______________________________________________
    Pd-dev mailing list
    [email protected]
    https://lists.puredata.info/listinfo/pd-dev
_______________________________________________
Pd-dev mailing list
[email protected]
https://lists.puredata.info/listinfo/pd-dev

Reply via email to