diff options
| author | flatmush <flatmush@d3e1167c-abe1-51d5-8199-f9061ebe54e4> | 2011-02-25 15:32:23 +0000 |
|---|---|---|
| committer | flatmush <flatmush@d3e1167c-abe1-51d5-8199-f9061ebe54e4> | 2011-02-25 15:32:23 +0000 |
| commit | 0317f964f43995d26d4a54d2f7d37b686ee5a97b (patch) | |
| tree | 2d10eca61cc99c0f1895c7e626b2940302d3cd8d /fixsingen | |
| parent | 0ecfa08dc392830ab4c52b5c8f26d412575583d4 (diff) | |
| download | libfixmath-0317f964f43995d26d4a54d2f7d37b686ee5a97b.tar.gz | |
Added option to replace sin function with ~384KiB look-up table for fastest and most accurate results.
Added tool to generate sin tables.
Tests indicate that using a lut is still ~2.1% out from sinf so it's very possible that our sin function is more accurate than the libmath sinf function on the computer I'm testing with. In which case the accuracy results are offset by that amount.
Diffstat (limited to 'fixsingen')
| -rw-r--r-- | fixsingen/fixsingen.cbp | 48 | ||||
| -rw-r--r-- | fixsingen/fixsingen.depend | 22 | ||||
| -rw-r--r-- | fixsingen/main.c | 35 |
3 files changed, 105 insertions, 0 deletions
diff --git a/fixsingen/fixsingen.cbp b/fixsingen/fixsingen.cbp new file mode 100644 index 0000000..7282665 --- /dev/null +++ b/fixsingen/fixsingen.cbp @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<CodeBlocks_project_file> + <FileVersion major="1" minor="6" /> + <Project> + <Option title="fixsingen" /> + <Option pch_mode="2" /> + <Option compiler="gcc" /> + <Build> + <Target title="dbg"> + <Option output="bin\dbg\fixsingen" prefix_auto="1" extension_auto="1" /> + <Option object_output="obj\dbg\" /> + <Option type="1" /> + <Option compiler="gcc" /> + <Compiler> + <Add option="-g" /> + </Compiler> + </Target> + <Target title="rel"> + <Option output="bin\rel\fixsingen" prefix_auto="1" extension_auto="1" /> + <Option object_output="obj\rel\" /> + <Option type="1" /> + <Option compiler="gcc" /> + <Compiler> + <Add option="-O2" /> + </Compiler> + <Linker> + <Add option="-s" /> + </Linker> + </Target> + </Build> + <Compiler> + <Add option="-Wall" /> + <Add directory="..\" /> + </Compiler> + <Linker> + <Add library="..\libfixmath\libfixmath.a" /> + </Linker> + <Unit filename="main.c"> + <Option compilerVar="CC" /> + </Unit> + <Extensions> + <code_completion /> + <envvars /> + <debugger /> + <lib_finder disable_auto="1" /> + </Extensions> + </Project> +</CodeBlocks_project_file> diff --git a/fixsingen/fixsingen.depend b/fixsingen/fixsingen.depend new file mode 100644 index 0000000..c4ab73e --- /dev/null +++ b/fixsingen/fixsingen.depend @@ -0,0 +1,22 @@ +# depslib dependency file v1.0
+1298645188 source:g:\vrfx\libfixmath\fixsingen\main.c
+ <stdio.h>
+ <stdlib.h>
+ <inttypes.h>
+ <math.h>
+ <libfixmath/fixmath.h>
+
+1298453688 g:\vrfx\libfixmath\\libfixmath\fixmath.h
+ "uint32.h"
+ "fract32.h"
+ "fix16.h"
+
+1298453688 g:\vrfx\libfixmath\\libfixmath\uint32.h
+ <stdint.h>
+
+1298453688 g:\vrfx\libfixmath\\libfixmath\fract32.h
+ <stdint.h>
+
+1298634082 g:\vrfx\libfixmath\\libfixmath\fix16.h
+ <stdint.h>
+
diff --git a/fixsingen/main.c b/fixsingen/main.c new file mode 100644 index 0000000..ce71647 --- /dev/null +++ b/fixsingen/main.c @@ -0,0 +1,35 @@ +#include <stdio.h>
+#include <stdlib.h>
+#include <inttypes.h>
+#include <math.h>
+#include <libfixmath/fixmath.h>
+
+int main(int argc, char** argv) {
+ FILE* fp = fopen("fix16_trig_sin_lut.h", "wb");
+ if(fp == NULL) {
+ fprintf(stderr, "Error: Unable to open file for writing.\n");
+ return EXIT_FAILURE;
+ }
+
+ 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));
+
+ uintptr_t i;
+ for(i = 0; i < (fix16_pi >> 1); 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, "\n\t};\n");
+
+ fprintf(fp, "\n");
+ fprintf(fp, "#endif\n");
+
+ fclose(fp);
+
+ return EXIT_SUCCESS;
+}
|
