From 09abf1b529b4226f585ecfbb20866715b901755b Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 1 Dec 2021 13:34:22 +0800 Subject: +fpm --- Client/ThirdParty/libfixmath/fixtest/main.c | 192 ++++++++++++++-------------- 1 file changed, 96 insertions(+), 96 deletions(-) (limited to 'Client/ThirdParty/libfixmath/fixtest/main.c') diff --git a/Client/ThirdParty/libfixmath/fixtest/main.c b/Client/ThirdParty/libfixmath/fixtest/main.c index 822f290..5f6dd92 100644 --- a/Client/ThirdParty/libfixmath/fixtest/main.c +++ b/Client/ThirdParty/libfixmath/fixtest/main.c @@ -1,96 +1,96 @@ -#include "hiclock.h" -#include -#include -#include -#include -#include -#include - -#define EXP -//#define ATAN -//#define SIN -//#define SQRT - -#ifdef EXP -#define fix_func fix16_exp -#define fix_func_str "fix16_exp" -#define flt_func expf -#define flt_func_str "expf" -#endif - -#ifdef ATAN -#define fix_func fix16_atan -#define fix_func_str "fix16_atan" -#define flt_func atanf -#define flt_func_str "atanf" -#endif - -#ifdef SIN -#define fix_func fix16_sin -#define fix_func_str "fix16_sin" -#define flt_func sinf -#define flt_func_str "sinf" -#endif - -#ifdef SQRT -#define fix_func fix16_sqrt -#define fix_func_str "fix16_sqrt" -#define flt_func sqrtf -#define flt_func_str "sqrtf" -#endif - -int main(int argc, char **argv) -{ - printf("libfixmath test tool\n"); - - hiclock_init(); - - uintptr_t args = (1 << 8); - uintptr_t iter = (1 << 8); - uintptr_t pass = (1 << 8); - - uintptr_t i; - srand(time(NULL)); - - hiclock_t fix_duration = 0; - hiclock_t flt_duration = 0; - fix16_t fix_error = 0; - - uintptr_t k; - for (k = 0; k < pass; k++) - { - fix16_t fix_args[args]; - for (i = 0; i < args; i++) fix_args[i] = (rand() ^ (rand() << 16)); - fix16_t fix_result[args]; - hiclock_t fix_start = hiclock(); - for (i = 0; i < iter; i++) - { - uintptr_t j; - for (j = 0; j < args; j++) fix_result[j] = fix_func(fix_args[j]); - } - hiclock_t fix_end = hiclock(); - - float flt_args[args]; - for (i = 0; i < args; i++) flt_args[i] = fix16_to_float(fix_args[i]); - float flt_result[args]; - hiclock_t flt_start = hiclock(); - for (i = 0; i < iter; i++) - { - uintptr_t j; - for (j = 0; j < args; j++) flt_result[j] = flt_func(flt_args[j]); - } - hiclock_t flt_end = hiclock(); - - for (i = 0; i < args; i++) - fix_error += abs(fix16_from_float(flt_result[i]) - fix_result[i]); - flt_duration += (flt_end - flt_start); - fix_duration += (fix_end - fix_start); - } - - printf("%16s: %08" PRIuHICLOCK " @ %" PRIu32 "Hz\n", flt_func_str, flt_duration, HICLOCKS_PER_SEC); - printf("%16s: %08" PRIuHICLOCK " @ %" PRIu32 "Hz\n", fix_func_str, fix_duration, HICLOCKS_PER_SEC); - printf(" Difference: %08" PRIiHICLOCK " (% 3.2f%%)\n", (flt_duration - fix_duration), ((fix_duration * 100.0) / flt_duration)); - printf(" Error: %f%%\n", ((fix16_to_dbl(fix_error) * 100.0) / (args * pass))); - - return EXIT_SUCCESS; -} +#include "hiclock.h" +#include +#include +#include +#include +#include +#include + +#define EXP +//#define ATAN +//#define SIN +//#define SQRT + +#ifdef EXP +#define fix_func fix16_exp +#define fix_func_str "fix16_exp" +#define flt_func expf +#define flt_func_str "expf" +#endif + +#ifdef ATAN +#define fix_func fix16_atan +#define fix_func_str "fix16_atan" +#define flt_func atanf +#define flt_func_str "atanf" +#endif + +#ifdef SIN +#define fix_func fix16_sin +#define fix_func_str "fix16_sin" +#define flt_func sinf +#define flt_func_str "sinf" +#endif + +#ifdef SQRT +#define fix_func fix16_sqrt +#define fix_func_str "fix16_sqrt" +#define flt_func sqrtf +#define flt_func_str "sqrtf" +#endif + +int main(int argc, char **argv) +{ + printf("libfixmath test tool\n"); + + hiclock_init(); + + uintptr_t args = (1 << 8); + uintptr_t iter = (1 << 8); + uintptr_t pass = (1 << 8); + + uintptr_t i; + srand(time(NULL)); + + hiclock_t fix_duration = 0; + hiclock_t flt_duration = 0; + fix16_t fix_error = 0; + + uintptr_t k; + for (k = 0; k < pass; k++) + { + fix16_t fix_args[args]; + for (i = 0; i < args; i++) fix_args[i] = (rand() ^ (rand() << 16)); + fix16_t fix_result[args]; + hiclock_t fix_start = hiclock(); + for (i = 0; i < iter; i++) + { + uintptr_t j; + for (j = 0; j < args; j++) fix_result[j] = fix_func(fix_args[j]); + } + hiclock_t fix_end = hiclock(); + + float flt_args[args]; + for (i = 0; i < args; i++) flt_args[i] = fix16_to_float(fix_args[i]); + float flt_result[args]; + hiclock_t flt_start = hiclock(); + for (i = 0; i < iter; i++) + { + uintptr_t j; + for (j = 0; j < args; j++) flt_result[j] = flt_func(flt_args[j]); + } + hiclock_t flt_end = hiclock(); + + for (i = 0; i < args; i++) + fix_error += abs(fix16_from_float(flt_result[i]) - fix_result[i]); + flt_duration += (flt_end - flt_start); + fix_duration += (fix_end - fix_start); + } + + printf("%16s: %08" PRIuHICLOCK " @ %" PRIu32 "Hz\n", flt_func_str, flt_duration, HICLOCKS_PER_SEC); + printf("%16s: %08" PRIuHICLOCK " @ %" PRIu32 "Hz\n", fix_func_str, fix_duration, HICLOCKS_PER_SEC); + printf(" Difference: %08" PRIiHICLOCK " (% 3.2f%%)\n", (flt_duration - fix_duration), ((fix_duration * 100.0) / flt_duration)); + printf(" Error: %f%%\n", ((fix16_to_dbl(fix_error) * 100.0) / (args * pass))); + + return EXIT_SUCCESS; +} -- cgit v1.1-26-g67d0