A new internal table has been added so that no if checks need to
be performed for the at() lookup.
The old table can still be accessed using getTable or atLegacy().
at() and atLegacy() return the same values, but at() is faster.
Previously, the cos/sin table had to be a power of 2, but there
are many use cases where the number of points is not necessarily
a power of 2 so this change the constructor so it now takes
in the number of points rather than the number of points as the
exponent of a power of 2.
The restriction is that the size must be divisible by 4.
The cos/sin table class now has an at() function for indexing
safely into its internal array.
This allows the checking and computing of the correct
indexes to be done internally.
The indexing in allows cos/sine of 0 to 2pi to be
obtained.
The values returned by getTable are the same as before.
Comments that describe the values that the table
contains has been modified to line up with what
the code is doing.
This is a regression from f4ba8a6485. The
commit replaced the static cosine and sine tables with dynamically created
ones. In the process of that a copy&paste error happened which made the sine
table use the layout of the cosine table. This commit now changes the
dynamically created sine tables to conform to the layout of the previous
static tables.
This removes the large static tables from the binary (which saves 500K
to 1Mb of binary size) and replaced them with a class which generates
the required tables as needed in RAM. This has been tested with QDM2
and shows no obvious performance degredation and Memprof shows no
significant rise in RAM usage.