From 5dd63f37ce73be2d36bb0ded9c7d8ba84932ccb7 Mon Sep 17 00:00:00 2001 From: flatmush Date: Fri, 25 Feb 2011 16:07:39 +0000 Subject: Updated sin lut to use ~200KiB for it's table with the same accuracy, the lookup table implementation tends to run at about 33-36% of the speed of sinf on my machine (Intel T5500). Fixed a bug in the sin lut code so that the results are always accurate. Changed fixsingen tool to generate tables correctly for the new implementation. --- fixsingen/fixsingen.depend | 4 ++-- fixsingen/main.c | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) (limited to 'fixsingen') diff --git a/fixsingen/fixsingen.depend b/fixsingen/fixsingen.depend index c4ab73e..e0c975d 100644 --- a/fixsingen/fixsingen.depend +++ b/fixsingen/fixsingen.depend @@ -1,5 +1,5 @@ # depslib dependency file v1.0 -1298645188 source:g:\vrfx\libfixmath\fixsingen\main.c +1298649568 source:g:\vrfx\libfixmath\fixsingen\main.c @@ -17,6 +17,6 @@ 1298453688 g:\vrfx\libfixmath\\libfixmath\fract32.h -1298634082 g:\vrfx\libfixmath\\libfixmath\fix16.h +1298648502 g:\vrfx\libfixmath\\libfixmath\fix16.h diff --git a/fixsingen/main.c b/fixsingen/main.c index ce71647..05461dc 100644 --- a/fixsingen/main.c +++ b/fixsingen/main.c @@ -11,18 +11,27 @@ int main(int argc, char** argv) { return EXIT_FAILURE; } + // TODO - Store as uint16_t with a count to determine the end and return 1. + fprintf(fp, "#ifndef __fix16_trig_sin_lut_h__\n"); fprintf(fp, "#define __fix16_trig_sin_lut_h__\n"); fprintf(fp, "\n"); - fprintf(fp, "static fix16_t _fix16_sin_lut[%"PRIi32"] = {", (fix16_pi >> 1)); + fix16_t fix16_sin_lut_count = (fix16_pi >> 1); + fix16_t fix16_sin_lut[fix16_sin_lut_count]; uintptr_t i; - for(i = 0; i < (fix16_pi >> 1); i++) { + for(i = 0; i < fix16_sin_lut_count; i++) + fix16_sin_lut[i] = fix16_from_dbl(sin(fix16_to_dbl(i))); + for(i--; fix16_sin_lut[i] == fix16_one; i--, fix16_sin_lut_count--); + + fprintf(fp, "static const uint32_t _fix16_sin_lut_count = %"PRIi32";\n", fix16_sin_lut_count); + fprintf(fp, "static uint16_t _fix16_sin_lut[%"PRIi32"] = {", fix16_sin_lut_count); + + for(i = 0; i < fix16_sin_lut_count; i++) { if((i & 7) == 0) fprintf(fp, "\n\t"); - fix16_t fix16_sin_lut = fix16_from_dbl(sin(fix16_to_dbl(i))); - fprintf(fp, "%"PRIi32", ", fix16_sin_lut); + fprintf(fp, "%"PRIi32", ", fix16_sin_lut[i]); } fprintf(fp, "\n\t};\n"); -- cgit v1.2.3