Index: source/test/perf/howExpensiveIs/sieve.cpp |
diff --git a/source/test/perf/howExpensiveIs/sieve.cpp b/source/test/perf/howExpensiveIs/sieve.cpp |
deleted file mode 100644 |
index 0db512181bafc0872d43374dc46c1cb979cfa316..0000000000000000000000000000000000000000 |
--- a/source/test/perf/howExpensiveIs/sieve.cpp |
+++ /dev/null |
@@ -1,213 +0,0 @@ |
-/* |
- ********************************************************************** |
- * Copyright (c) 2011-2012,International Business Machines |
- * Corporation and others. All Rights Reserved. |
- ********************************************************************** |
- */ |
- |
-#include "unicode/utimer.h" |
-#include <stdio.h> |
-#include <math.h> |
-#include <stdlib.h> |
- |
-#include "sieve.h" |
- |
-/* prime number sieve */ |
- |
-U_CAPI double uprv_calcSieveTime() { |
-#if 1 |
-#define SIEVE_SIZE U_LOTS_OF_TIMES /* standardized size */ |
-#else |
-#define SIEVE_SIZE <something_smaller> |
-#endif |
- |
-#define SIEVE_PRINT 0 |
- |
- char sieve[SIEVE_SIZE]; |
- UTimer a,b; |
- int i,k; |
- |
- utimer_getTime(&a); |
- for(int j=0;j<SIEVE_SIZE;j++) { |
- sieve[j]=1; |
- } |
- sieve[0]=0; |
- utimer_getTime(&b); |
- |
- |
-#if SIEVE_PRINT |
- printf("init %d: %.9f\n", SIEVE_SIZE,utimer_getDeltaSeconds(&a,&b)); |
-#endif |
- |
- utimer_getTime(&a); |
- for(i=2;i<SIEVE_SIZE/2;i++) { |
- for(k=i*2;k<SIEVE_SIZE;k+=i) { |
- sieve[k]=0; |
- } |
- } |
- utimer_getTime(&b); |
-#if SIEVE_PRINT |
- printf("sieve %d: %.9f\n", SIEVE_SIZE,utimer_getDeltaSeconds(&a,&b)); |
- |
- if(SIEVE_PRINT>0) { |
- k=0; |
- for(i=2;i<SIEVE_SIZE && k<SIEVE_PRINT;i++) { |
- if(sieve[i]) { |
- printf("%d ", i); |
- k++; |
- } |
- } |
- puts(""); |
- } |
- { |
- k=0; |
- for(i=0;i<SIEVE_SIZE;i++) { |
- if(sieve[i]) k++; |
- } |
- printf("Primes: %d\n", k); |
- } |
-#endif |
- |
- return utimer_getDeltaSeconds(&a,&b); |
-} |
-static int comdoub(const void *aa, const void *bb) |
-{ |
- const double *a = (const double*)aa; |
- const double *b = (const double*)bb; |
- |
- return (*a==*b)?0:((*a<*b)?-1:1); |
-} |
- |
-double midpoint(double *times, double i, int n) { |
- double fl = floor(i); |
- double ce = ceil(i); |
- if(ce>=n) ce=n; |
- if(fl==ce) { |
- return times[(int)fl]; |
- } else { |
- return (times[(int)fl]+times[(int)ce])/2; |
- } |
-} |
- |
-double medianof(double *times, int n, int type) { |
- switch(type) { |
- case 1: |
- return midpoint(times,n/4,n); |
- case 2: |
- return midpoint(times,n/2,n); |
- case 3: |
- return midpoint(times,(n/2)+(n/4),n); |
- } |
- return -1; |
-} |
- |
-double qs(double *times, int n, double *q1, double *q2, double *q3) { |
- *q1 = medianof(times,n,1); |
- *q2 = medianof(times,n,2); |
- *q3 = medianof(times,n,3); |
- return *q3-*q1; |
-} |
- |
-U_CAPI double uprv_getMeanTime(double *times, uint32_t *timeCount, double *marginOfError) { |
- double q1,q2,q3; |
- int n = *timeCount; |
- |
- /* calculate medians */ |
- qsort(times,n,sizeof(times[0]),comdoub); |
- double iqr = qs(times,n,&q1,&q2,&q3); |
- double rangeMin= (q1-(1.5*iqr)); |
- double rangeMax = (q3+(1.5*iqr)); |
- |
- /* Throw out outliers */ |
- int newN = n; |
-#if U_DEBUG |
- printf("iqr: %.9f, q1=%.9f, q2=%.9f, q3=%.9f, max=%.9f, n=%d\n", iqr,q1,q2,q3,(double)-1, n); |
-#endif |
- for(int i=0;i<newN;i++) { |
- if(times[i]<rangeMin || times[i]>rangeMax) { |
-#if U_DEBUG |
- printf("Removing outlier: %.9f outside [%.9f:%.9f]\n", times[i], rangeMin, rangeMax); |
-#endif |
- times[i--] = times[--newN]; // bring down a new value |
- } |
- } |
- |
-#if U_DEBUG |
- UBool didRemove = false; |
-#endif |
- /* if we removed any outliers, recalculate iqr */ |
- if(newN<n) { |
-#if U_DEBUG |
- didRemove = true; |
- printf("removed %d outlier(s), recalculating IQR..\n", n-newN); |
-#endif |
- n = newN; |
- *timeCount = n; |
- |
- qsort(times,n,sizeof(times[0]),comdoub); |
- double iqr = qs(times,n,&q1,&q2,&q3); |
- rangeMin= (q1-(1.5*iqr)); |
- rangeMax = (q3+(1.5*iqr)); |
- } |
- |
- /* calculate min/max and mean */ |
- double minTime = times[0]; |
- double maxTime = times[0]; |
- double meanTime = times[0]; |
- for(int i=1;i<n;i++) { |
- if(minTime>times[i]) minTime=times[i]; |
- if(maxTime<times[i]) maxTime=times[i]; |
- meanTime+=times[i]; |
- } |
- meanTime /= n; |
- |
- /* caculate standard deviation */ |
- double sd = 0; |
- for(int i=0;i<n;i++) { |
-#if U_DEBUG |
- if(didRemove) { |
- printf("recalc %d/%d: %.9f\n", i, n, times[i]); |
- } |
-#endif |
- sd += (times[i]-meanTime)*(times[i]-meanTime); |
- } |
- sd = sqrt(sd/((double)n-1.0)); |
- |
-#if U_DEBUG |
- printf("sd: %.9f, mean: %.9f\n", sd, meanTime); |
- printf("min: %.9f, q1=%.9f, q2=%.9f, q3=%.9f, max=%.9f, n=%d\n", minTime,q1,q2,q3,maxTime, n); |
- printf("iqr/sd = %.9f\n", iqr/sd); |
-#endif |
- |
- /* 1.960 = z sub 0.025 */ |
- *marginOfError = 1.960 * (sd/sqrt((double)n)); |
- /*printf("Margin of Error = %.4f (95%% confidence)\n", me);*/ |
- |
- return meanTime; |
-} |
- |
-UBool calcSieveTime = FALSE; |
-double meanSieveTime = 0.0; |
-double meanSieveME = 0.0; |
- |
-U_CAPI double uprv_getSieveTime(double *marginOfError) { |
- if(calcSieveTime==FALSE) { |
-#define SAMPLES 50 |
- uint32_t samples = SAMPLES; |
- double times[SAMPLES]; |
- |
- for(int i=0;i<SAMPLES;i++) { |
- times[i] = uprv_calcSieveTime(); |
-#if U_DEBUG |
- printf("sieve: %d/%d: %.9f\n", i,SAMPLES, times[i]); |
-#endif |
- } |
- |
- meanSieveTime = uprv_getMeanTime(times, &samples,&meanSieveME); |
- calcSieveTime=TRUE; |
- } |
- if(marginOfError!=NULL) { |
- *marginOfError = meanSieveME; |
- } |
- return meanSieveTime; |
-} |