16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************** 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 2011-2012,International Business Machines 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Corporation and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************** 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utimer.h" 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdio.h> 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <math.h> 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdlib.h> 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "sieve.h" 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* prime number sieve */ 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI double uprv_calcSieveTime() { 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if 1 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SIEVE_SIZE U_LOTS_OF_TIMES /* standardized size */ 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SIEVE_SIZE <something_smaller> 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SIEVE_PRINT 0 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char sieve[SIEVE_SIZE]; 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UTimer a,b; 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int i,k; 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utimer_getTime(&a); 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(int j=0;j<SIEVE_SIZE;j++) { 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sieve[j]=1; 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sieve[0]=0; 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utimer_getTime(&b); 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if SIEVE_PRINT 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("init %d: %.9f\n", SIEVE_SIZE,utimer_getDeltaSeconds(&a,&b)); 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utimer_getTime(&a); 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=2;i<SIEVE_SIZE/2;i++) { 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(k=i*2;k<SIEVE_SIZE;k+=i) { 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sieve[k]=0; 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utimer_getTime(&b); 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if SIEVE_PRINT 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("sieve %d: %.9f\n", SIEVE_SIZE,utimer_getDeltaSeconds(&a,&b)); 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(SIEVE_PRINT>0) { 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org k=0; 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=2;i<SIEVE_SIZE && k<SIEVE_PRINT;i++) { 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(sieve[i]) { 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("%d ", i); 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org k++; 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org puts(""); 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org k=0; 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0;i<SIEVE_SIZE;i++) { 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(sieve[i]) k++; 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("Primes: %d\n", k); 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return utimer_getDeltaSeconds(&a,&b); 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic int comdoub(const void *aa, const void *bb) 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const double *a = (const double*)aa; 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const double *b = (const double*)bb; 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (*a==*b)?0:((*a<*b)?-1:1); 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgdouble midpoint(double *times, double i, int n) { 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double fl = floor(i); 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double ce = ceil(i); 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(ce>=n) ce=n; 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(fl==ce) { 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return times[(int)fl]; 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (times[(int)fl]+times[(int)ce])/2; 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgdouble medianof(double *times, int n, int type) { 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch(type) { 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 1: 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return midpoint(times,n/4,n); 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 2: 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return midpoint(times,n/2,n); 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 3: 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return midpoint(times,(n/2)+(n/4),n); 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return -1; 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgdouble qs(double *times, int n, double *q1, double *q2, double *q3) { 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *q1 = medianof(times,n,1); 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *q2 = medianof(times,n,2); 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *q3 = medianof(times,n,3); 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return *q3-*q1; 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI double uprv_getMeanTime(double *times, uint32_t *timeCount, double *marginOfError) { 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double q1,q2,q3; 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int n = *timeCount; 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* calculate medians */ 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org qsort(times,n,sizeof(times[0]),comdoub); 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double iqr = qs(times,n,&q1,&q2,&q3); 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double rangeMin= (q1-(1.5*iqr)); 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double rangeMax = (q3+(1.5*iqr)); 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Throw out outliers */ 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int newN = n; 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_DEBUG 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("iqr: %.9f, q1=%.9f, q2=%.9f, q3=%.9f, max=%.9f, n=%d\n", iqr,q1,q2,q3,(double)-1, n); 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(int i=0;i<newN;i++) { 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(times[i]<rangeMin || times[i]>rangeMax) { 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_DEBUG 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("Removing outlier: %.9f outside [%.9f:%.9f]\n", times[i], rangeMin, rangeMax); 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org times[i--] = times[--newN]; // bring down a new value 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_DEBUG 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool didRemove = false; 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* if we removed any outliers, recalculate iqr */ 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(newN<n) { 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_DEBUG 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org didRemove = true; 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("removed %d outlier(s), recalculating IQR..\n", n-newN); 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org n = newN; 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *timeCount = n; 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org qsort(times,n,sizeof(times[0]),comdoub); 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double iqr = qs(times,n,&q1,&q2,&q3); 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org rangeMin= (q1-(1.5*iqr)); 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org rangeMax = (q3+(1.5*iqr)); 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* calculate min/max and mean */ 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double minTime = times[0]; 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double maxTime = times[0]; 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double meanTime = times[0]; 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(int i=1;i<n;i++) { 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(minTime>times[i]) minTime=times[i]; 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(maxTime<times[i]) maxTime=times[i]; 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org meanTime+=times[i]; 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org meanTime /= n; 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* caculate standard deviation */ 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double sd = 0; 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(int i=0;i<n;i++) { 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_DEBUG 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(didRemove) { 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("recalc %d/%d: %.9f\n", i, n, times[i]); 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sd += (times[i]-meanTime)*(times[i]-meanTime); 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sd = sqrt(sd/((double)n-1.0)); 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_DEBUG 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("sd: %.9f, mean: %.9f\n", sd, meanTime); 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("min: %.9f, q1=%.9f, q2=%.9f, q3=%.9f, max=%.9f, n=%d\n", minTime,q1,q2,q3,maxTime, n); 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("iqr/sd = %.9f\n", iqr/sd); 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 1.960 = z sub 0.025 */ 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *marginOfError = 1.960 * (sd/sqrt((double)n)); 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*printf("Margin of Error = %.4f (95%% confidence)\n", me);*/ 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return meanTime; 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool calcSieveTime = FALSE; 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgdouble meanSieveTime = 0.0; 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgdouble meanSieveME = 0.0; 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI double uprv_getSieveTime(double *marginOfError) { 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(calcSieveTime==FALSE) { 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SAMPLES 50 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t samples = SAMPLES; 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double times[SAMPLES]; 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(int i=0;i<SAMPLES;i++) { 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org times[i] = uprv_calcSieveTime(); 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_DEBUG 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("sieve: %d/%d: %.9f\n", i,SAMPLES, times[i]); 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org meanSieveTime = uprv_getMeanTime(times, &samples,&meanSieveME); 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calcSieveTime=TRUE; 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(marginOfError!=NULL) { 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *marginOfError = meanSieveME; 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return meanSieveTime; 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 214