From 4e2777e9fbda87a13dff9481bde0f073f57faa7a Mon Sep 17 00:00:00 2001 From: Matt Jenkins Date: Sat, 19 Apr 2014 10:31:25 +0100 Subject: [PATCH] Added double precision test programs --- src/cmd/9degree/9degree-pc | Bin 0 -> 8987 bytes src/cmd/9degree/9degree-pc.c | 57 ++++++++++++++++++++++++ src/cmd/9degree/9degree.c | 57 ++++++++++++++++++++++++ src/cmd/9degree/Makefile | 1 + src/cmd/Makefile | 2 +- src/cmd/generic.mk | 31 +++++++++++++ src/cmd/mathtest/Makefile | 1 + src/cmd/mathtest/mathtest.c | 49 ++++++++++++++++++++ src/cmd/scantest/Makefile | 1 + src/cmd/scantest/scantest.c | 84 +++++++++++++++++++++++++++++++++++ 10 files changed, 282 insertions(+), 1 deletion(-) create mode 100755 src/cmd/9degree/9degree-pc create mode 100644 src/cmd/9degree/9degree-pc.c create mode 100644 src/cmd/9degree/9degree.c create mode 120000 src/cmd/9degree/Makefile create mode 100644 src/cmd/generic.mk create mode 120000 src/cmd/mathtest/Makefile create mode 100644 src/cmd/mathtest/mathtest.c create mode 120000 src/cmd/scantest/Makefile create mode 100644 src/cmd/scantest/scantest.c diff --git a/src/cmd/9degree/9degree-pc b/src/cmd/9degree/9degree-pc new file mode 100755 index 0000000000000000000000000000000000000000..19f2802e6eb9eb97d4ab4c04c9e65f2f9ab5e63f GIT binary patch literal 8987 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 aKGI!tF=Cpy&gS<^_uM=Zi*LE5Xa5H6W$i=& literal 0 HcmV?d00001 diff --git a/src/cmd/9degree/9degree-pc.c b/src/cmd/9degree/9degree-pc.c new file mode 100644 index 0000000..3034ee0 --- /dev/null +++ b/src/cmd/9degree/9degree-pc.c @@ -0,0 +1,57 @@ +#include +#include +#include + +void print64x( double x ) { + char* p; + int j; + p = (char *) &x; + for( j=0; j< sizeof(x); j++) { + printf("%02X", p[(sizeof(x)-1)-j]&0xFF); + } +} + +void print32x( float x ) { + char* p; + int j; + p = (char *) &x; + for( j=0; j< sizeof(x); j++) { + printf("%02X", p[(sizeof(x)-1)-j]&0xFF); + } +} + +int main() { + struct timeval start, stop; + volatile double _p64, q64, r64, e64; + long i; + unsigned long elapsed; + + _p64 = 3.1415926535897932384626433832795; + + for(i=0;i<100;i++) { + // 64bit test + // 9 degree test input + q64 = i; + // Convert to radians + q64 = q64 * _p64 / 180.0; + // Make the test + + gettimeofday(&start, NULL); + + r64 = (asin(acos(atan(tan(cos(sin(q64))))))); + + gettimeofday(&stop, NULL); + + // Convert to degree + r64 = r64 * 180.0 / _p64; + + elapsed = stop.tv_usec - start.tv_usec; + + printf("%ld degree 64bit test result= %1.15e time= %lu\n" , i, r64, elapsed ); + //printf("= 0x"); + //print64x( r64 ); + //printf("\n"); + } + + return 0; +} diff --git a/src/cmd/9degree/9degree.c b/src/cmd/9degree/9degree.c new file mode 100644 index 0000000..86af3bc --- /dev/null +++ b/src/cmd/9degree/9degree.c @@ -0,0 +1,57 @@ +#include +#include +#include + +void print64x( double x ) { + char* p; + int j; + p = (char *) &x; + for( j=0; j< sizeof(x); j++) { + printf("%02X", p[(sizeof(x)-1)-j]&0xFF); + } +} + +void print32x( float x ) { + char* p; + int j; + p = (char *) &x; + for( j=0; j< sizeof(x); j++) { + printf("%02X", p[(sizeof(x)-1)-j]&0xFF); + } +} + +int main() { + struct timeval start, stop; + volatile double _p64, q64, r64, e64; + long i; + unsigned long elapsed; + + _p64 = 3.1415926535897932384626433832795; + + for(i=0;i<100;i++) { + // 64bit test + // 9 degree test input + q64 = i; + // Convert to radians + q64 = q64 * _p64 / 180.0; + // Make the test + + gettimeofday(&start, NULL); + + r64 = (asin(acos(atan(tan(cos(sin(q64))))))); + + gettimeofday(&stop, NULL); + + // Convert to degree + r64 = r64 * 180.0 / _p64; + + elapsed = stop.tv_usec - start.tv_usec; + + printf("%ld degree 64bit test result= %1.15e time= %lu " , i, r64, elapsed ); + printf("= 0x"); + print64x( r64 ); + printf("\n"); + } + + return 0; +} diff --git a/src/cmd/9degree/Makefile b/src/cmd/9degree/Makefile new file mode 120000 index 0000000..6709117 --- /dev/null +++ b/src/cmd/9degree/Makefile @@ -0,0 +1 @@ +../generic.mk \ No newline at end of file diff --git a/src/cmd/Makefile b/src/cmd/Makefile index f3fdf44..0f7e56f 100644 --- a/src/cmd/Makefile +++ b/src/cmd/Makefile @@ -17,7 +17,7 @@ SUBDIR = adb adc-demo ar as awk basic cc chflags chpass \ rdprof ranlib re renice retroforth scm setty sl \ sed sh smallc smlrc stty sysctl test uname wiznet xargs \ zmodem gtest msec unixbench cron compress date2 tip \ - talloc devupdate uucp smux + talloc devupdate uucp smux 9degree mathtest scantest # /sbin SUBDIR += chown chroot disktool fsck getty init \ diff --git a/src/cmd/generic.mk b/src/cmd/generic.mk new file mode 100644 index 0000000..345c230 --- /dev/null +++ b/src/cmd/generic.mk @@ -0,0 +1,31 @@ +#========================================== +# Makefile: makefile for adc-demo +# Copyright 2012 Majenko Technolohies +# (matt@majenko.co.uk +# Last Modified: 29/01/2012 +#========================================== + +TOPSRC = $(shell cd ../../..; pwd) +include $(TOPSRC)/target.mk + +PWD = $(shell pwd) +PROG = $(shell basename "$(PWD)") + +OBJS = $(PROG).o +SRCS = $(PROG).c + +all: $(PROG) + +-include Makefile.app + +$(PROG): ${OBJS} + ${CC} ${LDFLAGS} -o $(PROG).elf ${OBJS} ${LIBS} + ${OBJDUMP} -S $(PROG).elf > $(PROG).dis + ${SIZE} $(PROG).elf + ${ELF2AOUT} $(PROG).elf $@ + +clean: + -rm -f $(PROG) ${OBJS} $(PROG).elf $(PROG).dis + +install: all + install $(PROG) $(DESTDIR)/bin/ diff --git a/src/cmd/mathtest/Makefile b/src/cmd/mathtest/Makefile new file mode 120000 index 0000000..6709117 --- /dev/null +++ b/src/cmd/mathtest/Makefile @@ -0,0 +1 @@ +../generic.mk \ No newline at end of file diff --git a/src/cmd/mathtest/mathtest.c b/src/cmd/mathtest/mathtest.c new file mode 100644 index 0000000..57c49bd --- /dev/null +++ b/src/cmd/mathtest/mathtest.c @@ -0,0 +1,49 @@ +// Pito 12/2013 + +#include +#include + +// print out double (IEEE 64bit) variable in HEX +// ie. 9.0 is 4022000000000000 +// more on http://babbage.cs.qc.cuny.edu/IEEE-754/ + +void print64x( double x ) { + const unsigned char* p; + int j; + p = (unsigned char *) &x; + printf("%02X", p[7]); + printf("%02X", p[6]); + printf("%02X", p[5]); + printf("%02X", p[4]); + printf("%02X", p[3]); + printf("%02X", p[2]); + printf("%02X", p[1]); + printf("%02X", p[0]); +} + +void print32x( float x ) { + const char* p; + int j; + p = (char *) &x; + for( j=0; j< sizeof(x); j++) { + printf("%02X", p[(sizeof(x)-1)-j]&0xFF); + } +} + +int main() { + volatile double num1 = 1.2499999999999998193580478994e-10; + volatile double num2 = 2.16000000000000081281633984229e-10; + volatile double res = 0; + + res = num1 + num2; + +// print64x(num1); +// printf(" + "); +// print64x(num2); +// printf(" = "); +// print64x(res); +// printf("\n"); + + printf("%1.15e + %1.15e = %1.15e\n", num1, num2, res); + return 0; +} diff --git a/src/cmd/scantest/Makefile b/src/cmd/scantest/Makefile new file mode 120000 index 0000000..6709117 --- /dev/null +++ b/src/cmd/scantest/Makefile @@ -0,0 +1 @@ +../generic.mk \ No newline at end of file diff --git a/src/cmd/scantest/scantest.c b/src/cmd/scantest/scantest.c new file mode 100644 index 0000000..b41e915 --- /dev/null +++ b/src/cmd/scantest/scantest.c @@ -0,0 +1,84 @@ +// Pito 12/2013 + +#include +#include + +// print out double (IEEE 64bit) variable in HEX +// ie. 9.0 is 4022000000000000 +// more on http://babbage.cs.qc.cuny.edu/IEEE-754/ + +void print64x( double x ) { + const unsigned char* p; + int j; + p = (unsigned char *) &x; + printf("%02X", p[7]); + printf("%02X", p[6]); + printf("%02X", p[5]); + printf("%02X", p[4]); + printf("%02X", p[3]); + printf("%02X", p[2]); + printf("%02X", p[1]); + printf("%02X", p[0]); +} + +void print32x( float x ) { + const char* p; + int j; + p = (char *) &x; + for( j=0; j< sizeof(x); j++) { + printf("%02X", p[(sizeof(x)-1)-j]&0xFF); + } +} + +int main() { + double num; + int i; + double sum; + FILE *InFile, *OutFile; + char str[100]; + double backup; + double result; + + if ((OutFile = fopen("num.dat","w")) == 0) { + printf("num.dat not found\n"); + return (1); + } + + for (i=0; i<=10000; i++) { + num = 0.0001L * (double)(i); + num = num * num * num; + fprintf(OutFile, "%1.15e\n", num); + } + + fclose(OutFile); + + if ((InFile = fopen("num.dat","r")) == 0) { + printf("num.dat not found\n"); + return (1); + } + + sum = 0; + num = 0; + + for (i=0; i<=10000; i++) { + backup = sum; + fgets (str, 80, InFile); + sscanf (str,"%le",&num); + result = sum + num; + + if (sum != backup) { + printf("*** SUM CHANGED: %1.15e => %1.15e ***\n", backup, sum); + } + sum = result; + } + + printf("Sum test result = %1.15e\n", sum); + printf("Shall be result = 2.500500025000002e+03\n"); + printf("Sum test result (HEX) = "); + print64x( sum ); + printf("\n"); + printf("Shall be result (HEX) = 40A389000346DC62\n"); + + fclose(InFile); + return 0; +}