# 为什么我花在二分搜索上的时间比线性搜索多？

[英]Why do I spend more time with binary search than with linear search?

``````int search(int* nums, int numsSize, int target){
int m = 0;
int l = 0;
int r = numsSize - 1;
do{
m = r - (r - l) / 2;
if(nums[m] < target) r = m + 1;
else l = m - 1;
}
while ((l <= r) && (nums[m] != target));
return m;
}
``````

``````m = r - (r - l) / 2;
``````

``````m = l + (r - l) / 2;
``````

1. `orig`你的原始代码
2. `flat` ——线性搜索
3. `fix1` -- 原始代码 + 修复

``````#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define sysfault(_fmt...) \
do { \
printf(_fmt); \
exit(1); \
} while (0)

struct fnc {
int (*fnc)(int *nums, int numsSize, int target);
const char *tag;
double elap;
};

int capacity = 0;
int *buf = NULL;

int
orig(int *nums, int numsSize, int target)
{
int m = 0;
int l = 0;
int r = numsSize - 1;

do {
m = r - (r - l) / 2;
if (nums[m] < target)
r = m + 1;
else
l = m - 1;
} while ((l <= r) && (nums[m] != target));

return m;
}

int
flat(int *nums, int numsSize, int target)
{
int m = 0;
int r = -1;

for (;  m < numsSize;  ++m) {
if (nums[m] == target) {
r = m;
break;
}
}

return r;
}

int
fix1(int *nums, int numsSize, int target)
{
int m;
int l = 0;
int h = numsSize - 1;

do {
m = l + (h - l) / 2;
if (nums[m] < target)
l = m + 1;
else
h = m - 1;
} while ((l <= h) && (nums[m] != target));

return m;
}

struct fnc fnclist[] = {
{ .fnc = flat, .tag = "flat" },
{ .fnc = fix1, .tag = "fix1" },
#if ORIG
{ .fnc = orig, .tag = "orig" },
#endif
{ .fnc = NULL },
};

double
tscgetf(void)
{
struct timespec ts;
double sec;

clock_gettime(CLOCK_MONOTONIC,&ts);

sec = ts.tv_nsec;
sec /= 1e9;
sec += ts.tv_sec;

return sec;
}

int
xrand(int mod)
{
int val = rand();
val %= mod;
return val;
}

void
dofnc(struct fnc *fnc,int *buf,int count,int idxexp)
{
double tscbeg;
double tscend;

tscbeg = tscgetf();
int idxact = fnc->fnc(buf,count,buf[idxexp]);
tscend = tscgetf();

tscend -= tscbeg;
printf("%.9f %s %d/%d %d\n",tscend,fnc->tag,idxexp,idxact,count);
if (idxact != idxexp)
sysfault("dofnc: fault\n");
}

void
dotest(void)
{

int count = xrand(10000) + 1;

if (count > capacity) {
capacity = count;
buf = realloc(buf,sizeof(buf) * capacity);
}

int val = 0;
for (int idx = 0;  idx < count;  ++idx) {
int dta = xrand(100);
val += dta;
buf[idx] = val;
}

int idxexp = xrand(count);

printf("\n");
printf("count=%d\n",count);
for (struct fnc *fnc = fnclist;  fnc->fnc != NULL;  ++fnc)
dofnc(fnc,buf,count,idxexp);
}

int
main(void)
{

setlinebuf(stdout);

for (int tstno = 1;  tstno <= 10;  ++tstno)
dotest();
}
``````

``````
count=9384
0.000006721 flat 2253/2253 9384
0.000000241 fix1 2253/2253 9384

count=5993
0.000003500 flat 1324/1324 5993
0.000000181 fix1 1324/1324 5993

count=8955
0.000001280 flat 426/426 8955
0.000000200 fix1 426/426 8955

count=340
0.000000076 flat 7/7 340
0.000000157 fix1 7/7 340

count=1964
0.000003769 flat 1298/1298 1964
0.000000195 fix1 1298/1298 1964

count=21
0.000000103 flat 17/17 21
0.000000108 fix1 17/17 21

count=4228
0.000011880 flat 4139/4139 4228
0.000000209 fix1 4139/4139 4228

count=7858
0.000006904 flat 2398/2398 7858
0.000000231 fix1 2398/2398 7858

count=8963
0.000001663 flat 537/537 8963
0.000000218 fix1 537/537 8963

count=6304
0.000001787 flat 556/556 6304
0.000000282 fix1 556/556 6304
``````

1. 通过为`SIGALRM`设置信号处理程序并使用`alarm``sigsetjmp``setlongjmp`添加超时。

2. 计算`clock_gettime`调用的开销（来自`tscgetf` ）。

3. 将每个测试运行 3 次，并使用最佳 [最低] 时间来考虑任何系统开销/时间片。

4. 选择要搜索的随机索引/值。

5. 选择低于最小数组值的值（应该失败）。

6. 选择高于最大数组值的值（应该失败）。

7. 测试随机数组大小。

8. 测试 1 到 100（乘以 3）范围内的数组大小。

``````#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <time.h>
#include <setjmp.h>

#define sysfault(_fmt...) \
do { \
printf(_fmt); \
exit(1); \
} while (0)

struct fnc {
int (*fnc)(int *nums, int numsSize, int target);
const char *tag;
double elap;
};

int capacity = 0;
int *buf = NULL;
jmp_buf jbuf;

int opt_d;                              // 1=dump array on faults
int opt_i;                              // 1=ignore errors

int
orig(int *nums, int numsSize, int target)
{
int m = 0;
int l = 0;
int r = numsSize - 1;

do {
m = r - (r - l) / 2;
if (nums[m] < target)
r = m + 1;
else
l = m - 1;
} while ((l <= r) && (nums[m] != target));

return m;
}

int
flat(int *nums, int numsSize, int target)
{
int m = 0;
int r = -1;

for (;  m < numsSize;  ++m) {
if (nums[m] == target) {
r = m;
break;
}
}

return r;
}

int
fix1(int *nums, int numsSize, int target)
{
int m;
int l = 0;
int v;
int h = numsSize - 1;
int ret = -1;

while (l <= h) {
m = l + (h - l) / 2;

v = nums[m];
if (v == target) {
ret = m;
break;
}

if (v < target)
l = m + 1;
else
h = m - 1;
}

return ret;
}

struct fnc fnclist[] = {
{ .fnc = flat, .tag = "flat" },
{ .fnc = fix1, .tag = "fix1" },
{ .fnc = orig, .tag = "orig" },
{ .fnc = NULL },
};

double tscbias = 0.0;

double
tscgetf(void)
{
struct timespec ts;
double sec;

clock_gettime(CLOCK_MONOTONIC,&ts);

sec = ts.tv_nsec;
sec /= 1e9;
sec += ts.tv_sec;

return sec;
}

void
tscinit(void)
{
double tscbeg;
double tscend;
double elap = 99.0;

for (int tryno = 1;  tryno <= 100;  ++tryno) {
tscbeg = tscgetf();
tscend = tscgetf();
tscend -= tscbeg;
if (tscend < elap)
elap = tscend;
}

printf("tscinit: %.9f\n",elap);
tscbias = elap;
}

double
tscelap(double tscbeg,double tscend)
{

tscend -= tscbeg;
tscend -= tscbias;

return tscend;
}

int
xrand(int mod)
{
int val = rand();
val %= mod;
return val;
}

int
dofnc(struct fnc *fnc,int *buf,int count,int idxexp,int valexp)
{
double tscbeg = 0.0;
double tscend;
double elap = 99.0;
int tmout;
int fault = 0;

int idxact = -1;

for (int tryno = 1;  tryno <= 3;  ++tryno) {
tmout = sigsetjmp(jbuf,1);

// timeout occurred -- get [phony] elapsed time
if (tmout) {
tscend = tscgetf();
elap = tscelap(tscbeg,tscend);
break;
}

alarm(1);

tscbeg = tscgetf();
idxact = fnc->fnc(buf,count,valexp);
tscend = tscgetf();

alarm(0);

// remember the best time
tscend = tscelap(tscbeg,tscend);
if (tscend < elap)
elap = tscend;
}

// check result
do {
if (idxact == idxexp)
break;
if (tmout)
break;
fault = 1;
} while (0);

printf("%.9f %s I:%d/%d V:%d%s%s\n",
elap,fnc->tag,idxexp,idxact,valexp,
tmout ? " (TIME)" : "",
fault ? " (FAULT)" : "");

return fault;
}

void
dotest(int count)
{
int fault = 0;

if (count <= 0)
count = xrand(10000) + 1;

if (count > capacity) {
capacity = count;
buf = realloc(buf,sizeof(buf) * capacity);
}

int val = 0;
for (int idx = 0;  idx < count;  ++idx) {
int dta = xrand(99) + 1;
val += dta;
buf[idx] = val;
}

int idxexp = xrand(count);

printf("\n");
printf("dotest: count=%d lo=%d hi=%d\n",count,buf[0],buf[count - 1]);

for (struct fnc *fnc = fnclist;  fnc->fnc != NULL;  ++fnc) {
int valexp = buf[idxexp];
if (dofnc(fnc,buf,count,idxexp,valexp))
fault = 1;

// check for value lower than min
valexp = buf[0] - 1;
if (dofnc(fnc,buf,count,-1,valexp))
fault = 1;

// check for value higher than max
valexp = buf[count - 1] + 1;
if (dofnc(fnc,buf,count,-1,valexp))
fault = 1;
}

// dump array on error/fault
do {
if (! fault)
break;

if (! opt_d)
break;

int totlen = 0;

printf("ARRAY:\n");
for (int idx = 0;  idx < count;  ++idx) {
totlen += printf(" %d:%d",idx,buf[idx]);
if (totlen > 65) {
printf("\n");
totlen = 0;
}
}
if (totlen > 0)
printf("\n");
} while (0);

if (fault && (! opt_i))
sysfault("dotest: aborting ...\n");
}

void
sighdr(int signo)
{
siglongjmp(jbuf,1);
}

int
main(int argc,char **argv)
{

--argc;
++argv;

for (;  argc > 0;  --argc, ++argv) {
char *cp = *argv;
if (*cp != '-')
break;

cp += 2;
switch (cp[-1]) {
case 'i':
opt_i = ! opt_i;
break;
}
}

setlinebuf(stdout);
signal(SIGALRM,sighdr);

tscinit();

for (int tstno = 1;  tstno <= 10;  ++tstno)
dotest(-1);

for (int count = 1;  count <= 100;  count += 3)
dotest(count);
}
``````

``````tscinit: 0.000000026

dotest: count=9384 lo=44 hi=470252
0.000002194 flat I:2253/2253 V:114229
0.000010131 flat I:-1/-1 V:43
0.000007218 flat I:-1/-1 V:470253
0.000000081 fix1 I:2253/2253 V:114229
0.000000079 fix1 I:-1/-1 V:43
0.000000048 fix1 I:-1/-1 V:470253
1.000016339 orig I:2253/-1 V:114229 (TIME)
1.000014557 orig I:-1/-1 V:43 (TIME)
1.000009347 orig I:-1/-1 V:470253 (TIME)

dotest: count=5993 lo=55 hi=299486
0.000001431 flat I:1324/1324 V:67045
0.000006461 flat I:-1/-1 V:54
0.000006460 flat I:-1/-1 V:299487
0.000000035 fix1 I:1324/1324 V:67045
0.000000038 fix1 I:-1/-1 V:54
0.000000053 fix1 I:-1/-1 V:299487
1.000009870 orig I:1324/-1 V:67045 (TIME)
1.000029920 orig I:-1/-1 V:54 (TIME)
1.000009728 orig I:-1/-1 V:299487 (TIME)

dotest: count=8955 lo=17 hi=445765
0.000000465 flat I:426/426 V:21179
0.000006463 flat I:-1/-1 V:16
0.000008701 flat I:-1/-1 V:445766
0.000000063 fix1 I:426/426 V:21179
0.000000064 fix1 I:-1/-1 V:16
0.000000048 fix1 I:-1/-1 V:445766
1.000016202 orig I:426/-1 V:21179 (TIME)
1.000009818 orig I:-1/-1 V:16 (TIME)
1.000009810 orig I:-1/-1 V:445766 (TIME)

dotest: count=340 lo=70 hi=16804
0.000000014 flat I:7/7 V:486
0.000000372 flat I:-1/-1 V:69
0.000000372 flat I:-1/-1 V:16805
0.000000035 fix1 I:7/7 V:486
0.000000017 fix1 I:-1/-1 V:69
0.000000028 fix1 I:-1/-1 V:16805
1.000009743 orig I:7/-1 V:486 (TIME)
1.000009810 orig I:-1/-1 V:69 (TIME)
1.000032772 orig I:-1/-1 V:16805 (TIME)

dotest: count=1964 lo=18 hi=97889
0.000001410 flat I:1298/1298 V:64382
0.000001936 flat I:-1/-1 V:17
0.000002120 flat I:-1/-1 V:97890
0.000000041 fix1 I:1298/1298 V:64382
0.000000035 fix1 I:-1/-1 V:17
0.000000039 fix1 I:-1/-1 V:97890
1.000009294 orig I:1298/-1 V:64382 (TIME)
1.000013307 orig I:-1/-1 V:17 (TIME)
1.000008924 orig I:-1/-1 V:97890 (TIME)

dotest: count=21 lo=50 hi=1126
0.000000031 flat I:17/17 V:1024
0.000000029 flat I:-1/-1 V:49
0.000000030 flat I:-1/-1 V:1127
0.000000022 fix1 I:17/17 V:1024
0.000000021 fix1 I:-1/-1 V:49
0.000000016 fix1 I:-1/-1 V:1127
1.000023933 orig I:17/-1 V:1024 (TIME)
1.000008840 orig I:-1/-1 V:49 (TIME)
1.000009542 orig I:-1/-1 V:1127 (TIME)

dotest: count=4228 lo=96 hi=214509
0.000004465 flat I:4139/4139 V:210346
0.000004559 flat I:-1/-1 V:95
0.000004559 flat I:-1/-1 V:214510
0.000000038 fix1 I:4139/4139 V:210346
0.000000039 fix1 I:-1/-1 V:95
0.000000039 fix1 I:-1/-1 V:214510
1.000009090 orig I:4139/-1 V:210346 (TIME)
1.000009507 orig I:-1/-1 V:95 (TIME)
1.000009268 orig I:-1/-1 V:214510 (TIME)

dotest: count=7858 lo=70 hi=390374
0.000002593 flat I:2398/2398 V:120399
0.000005670 flat I:-1/-1 V:69
0.000005670 flat I:-1/-1 V:390375
0.000000033 fix1 I:2398/2398 V:120399
0.000000044 fix1 I:-1/-1 V:69
0.000000060 fix1 I:-1/-1 V:390375
1.000009538 orig I:2398/-1 V:120399 (TIME)
1.000009622 orig I:-1/-1 V:69 (TIME)
1.000011139 orig I:-1/-1 V:390375 (TIME)

dotest: count=8963 lo=60 hi=446543
0.000000585 flat I:537/537 V:26242
0.000006468 flat I:-1/-1 V:59
0.000006462 flat I:-1/-1 V:446544
0.000000069 fix1 I:537/537 V:26242
0.000000045 fix1 I:-1/-1 V:59
0.000000059 fix1 I:-1/-1 V:446544
1.000011390 orig I:537/-1 V:26242 (TIME)
1.000009583 orig I:-1/-1 V:59 (TIME)
1.000009641 orig I:-1/-1 V:446544 (TIME)

dotest: count=6304 lo=60 hi=317397
0.000000607 flat I:556/556 V:27198
0.000004554 flat I:-1/-1 V:59
0.000004549 flat I:-1/-1 V:317398
0.000000064 fix1 I:556/556 V:27198
0.000000048 fix1 I:-1/-1 V:59
0.000000054 fix1 I:-1/-1 V:317398
1.000044305 orig I:556/-1 V:27198 (TIME)
1.000018003 orig I:-1/-1 V:59 (TIME)
1.000013375 orig I:-1/-1 V:317398 (TIME)

dotest: count=1 lo=34 hi=34
0.000000011 flat I:0/0 V:34
0.000000011 flat I:-1/-1 V:33
0.000000011 flat I:-1/-1 V:35
0.000000009 fix1 I:0/0 V:34
0.000000011 fix1 I:-1/-1 V:33
0.000000018 fix1 I:-1/-1 V:35
0.000000017 orig I:0/0 V:34
1.000009685 orig I:-1/-1 V:33 (TIME)
1.000009896 orig I:-1/-1 V:35 (TIME)

dotest: count=4 lo=99 hi=250
0.000000009 flat I:0/0 V:99
0.000000013 flat I:-1/-1 V:98
0.000000013 flat I:-1/-1 V:251
0.000000012 fix1 I:0/0 V:99
0.000000012 fix1 I:-1/-1 V:98
0.000000015 fix1 I:-1/-1 V:251
1.000016379 orig I:0/-1 V:99 (TIME)
1.000009174 orig I:-1/-1 V:98 (TIME)
1.000009049 orig I:-1/-1 V:251 (TIME)

dotest: count=7 lo=33 hi=324
0.000000014 flat I:1/1 V:69
0.000000016 flat I:-1/-1 V:32
0.000000015 flat I:-1/-1 V:325
0.000000013 fix1 I:1/1 V:69
0.000000013 fix1 I:-1/-1 V:32
0.000000013 fix1 I:-1/-1 V:325
1.000013937 orig I:1/-1 V:69 (TIME)
1.000011886 orig I:-1/-1 V:32 (TIME)
1.000015891 orig I:-1/-1 V:325 (TIME)

dotest: count=10 lo=51 hi=446
0.000000013 flat I:3/3 V:213
0.000000023 flat I:-1/-1 V:50
0.000000016 flat I:-1/-1 V:447
0.000000014 fix1 I:3/3 V:213
0.000000014 fix1 I:-1/-1 V:50
0.000000016 fix1 I:-1/-1 V:447
1.000009785 orig I:3/-1 V:213 (TIME)
1.000009554 orig I:-1/-1 V:50 (TIME)
1.000009879 orig I:-1/-1 V:447 (TIME)

dotest: count=13 lo=13 hi=724
0.000000014 flat I:2/2 V:141
0.000000025 flat I:-1/-1 V:12
0.000000017 flat I:-1/-1 V:725
0.000000012 fix1 I:2/2 V:141
0.000000013 fix1 I:-1/-1 V:12
0.000000014 fix1 I:-1/-1 V:725
1.000010021 orig I:2/-1 V:141 (TIME)
1.000009654 orig I:-1/-1 V:12 (TIME)
1.000014118 orig I:-1/-1 V:725 (TIME)

dotest: count=16 lo=76 hi=645
0.000000022 flat I:13/13 V:573
0.000000027 flat I:-1/-1 V:75
0.000000021 flat I:-1/-1 V:646
0.000000020 fix1 I:13/13 V:573
0.000000014 fix1 I:-1/-1 V:75
0.000000016 fix1 I:-1/-1 V:646
1.000015331 orig I:13/-1 V:573 (TIME)
1.000013445 orig I:-1/-1 V:75 (TIME)
1.000009196 orig I:-1/-1 V:646 (TIME)

dotest: count=19 lo=54 hi=970
0.000000026 flat I:10/10 V:565
0.000000029 flat I:-1/-1 V:53
0.000000029 flat I:-1/-1 V:971
0.000000014 fix1 I:10/10 V:565
0.000000014 fix1 I:-1/-1 V:53
0.000000016 fix1 I:-1/-1 V:971
1.000009642 orig I:10/-1 V:565 (TIME)
1.000009610 orig I:-1/-1 V:53 (TIME)
1.000009402 orig I:-1/-1 V:971 (TIME)

dotest: count=22 lo=48 hi=1076
0.000000017 flat I:7/7 V:444
0.000000029 flat I:-1/-1 V:47
0.000000025 flat I:-1/-1 V:1077
0.000000020 fix1 I:7/7 V:444
0.000000014 fix1 I:-1/-1 V:47
0.000000022 fix1 I:-1/-1 V:1077
1.000010220 orig I:7/-1 V:444 (TIME)
1.000014361 orig I:-1/-1 V:47 (TIME)
1.000013648 orig I:-1/-1 V:1077 (TIME)

dotest: count=25 lo=42 hi=1184
0.000000031 flat I:16/16 V:785
0.000000032 flat I:-1/-1 V:41
0.000000024 flat I:-1/-1 V:1185
0.000000021 fix1 I:16/16 V:785
0.000000014 fix1 I:-1/-1 V:41
0.000000015 fix1 I:-1/-1 V:1185
1.000009388 orig I:16/-1 V:785 (TIME)
1.000009349 orig I:-1/-1 V:41 (TIME)
1.000011995 orig I:-1/-1 V:1185 (TIME)

dotest: count=28 lo=26 hi=1497
0.000000024 flat I:8/8 V:450
0.000000033 flat I:-1/-1 V:25
0.000000033 flat I:-1/-1 V:1498
0.000000022 fix1 I:8/8 V:450
0.000000014 fix1 I:-1/-1 V:25
0.000000016 fix1 I:-1/-1 V:1498
1.000010067 orig I:8/-1 V:450 (TIME)
1.000009827 orig I:-1/-1 V:25 (TIME)
1.000014836 orig I:-1/-1 V:1498 (TIME)

dotest: count=31 lo=24 hi=1436
0.000000047 flat I:20/20 V:915
0.000000069 flat I:-1/-1 V:23
0.000000075 flat I:-1/-1 V:1437
0.000000070 fix1 I:20/20 V:915
0.000000031 fix1 I:-1/-1 V:23
0.000000030 fix1 I:-1/-1 V:1437
1.000013925 orig I:20/-1 V:915 (TIME)
1.000010255 orig I:-1/-1 V:23 (TIME)
1.000011782 orig I:-1/-1 V:1437 (TIME)

dotest: count=34 lo=87 hi=1745
0.000000029 flat I:16/16 V:980
0.000000038 flat I:-1/-1 V:86
0.000000036 flat I:-1/-1 V:1746
0.000000010 fix1 I:16/16 V:980
0.000000015 fix1 I:-1/-1 V:86
0.000000018 fix1 I:-1/-1 V:1746
1.000015356 orig I:16/-1 V:980 (TIME)
1.000013789 orig I:-1/-1 V:86 (TIME)
1.000009397 orig I:-1/-1 V:1746 (TIME)

dotest: count=37 lo=11 hi=1650
0.000000038 flat I:29/29 V:1331
0.000000039 flat I:-1/-1 V:10
0.000000038 flat I:-1/-1 V:1651
0.000000014 fix1 I:29/29 V:1331
0.000000022 fix1 I:-1/-1 V:10
0.000000023 fix1 I:-1/-1 V:1651
1.000010122 orig I:29/-1 V:1331 (TIME)
1.000013891 orig I:-1/-1 V:10 (TIME)
1.000016981 orig I:-1/-1 V:1651 (TIME)

dotest: count=40 lo=89 hi=2263
0.000000036 flat I:23/23 V:1575
0.000000040 flat I:-1/-1 V:88
0.000000040 flat I:-1/-1 V:2264
0.000000023 fix1 I:23/23 V:1575
0.000000014 fix1 I:-1/-1 V:88
0.000000016 fix1 I:-1/-1 V:2264
1.000009746 orig I:23/-1 V:1575 (TIME)
1.000013715 orig I:-1/-1 V:88 (TIME)
1.000012347 orig I:-1/-1 V:2264 (TIME)

dotest: count=43 lo=23 hi=2179
0.000000035 flat I:26/26 V:1503
0.000000049 flat I:-1/-1 V:22
0.000000042 flat I:-1/-1 V:2180
0.000000020 fix1 I:26/26 V:1503
0.000000021 fix1 I:-1/-1 V:22
0.000000017 fix1 I:-1/-1 V:2180
1.000012506 orig I:26/-1 V:1503 (TIME)
1.000012921 orig I:-1/-1 V:22 (TIME)
1.000009616 orig I:-1/-1 V:2180 (TIME)

dotest: count=46 lo=66 hi=2278
0.000000019 flat I:1/1 V:84
0.000000043 flat I:-1/-1 V:65
0.000000043 flat I:-1/-1 V:2279
0.000000014 fix1 I:1/1 V:84
0.000000015 fix1 I:-1/-1 V:65
0.000000022 fix1 I:-1/-1 V:2279
1.000012092 orig I:1/-1 V:84 (TIME)
1.000009936 orig I:-1/-1 V:65 (TIME)
1.000009509 orig I:-1/-1 V:2279 (TIME)

dotest: count=49 lo=29 hi=2565
0.000000036 flat I:26/26 V:1662
0.000000046 flat I:-1/-1 V:28
0.000000044 flat I:-1/-1 V:2566
0.000000022 fix1 I:26/26 V:1662
0.000000015 fix1 I:-1/-1 V:28
0.000000017 fix1 I:-1/-1 V:2566
1.000009716 orig I:26/-1 V:1662 (TIME)
1.000009498 orig I:-1/-1 V:28 (TIME)
1.000009616 orig I:-1/-1 V:2566 (TIME)

dotest: count=52 lo=72 hi=2728
0.000000040 flat I:28/28 V:1354
0.000000048 flat I:-1/-1 V:71
0.000000054 flat I:-1/-1 V:2729
0.000000014 fix1 I:28/28 V:1354
0.000000014 fix1 I:-1/-1 V:71
0.000000023 fix1 I:-1/-1 V:2729
1.000010207 orig I:28/-1 V:1354 (TIME)
1.000011530 orig I:-1/-1 V:71 (TIME)
1.000009826 orig I:-1/-1 V:2729 (TIME)

dotest: count=55 lo=54 hi=2677
0.000000031 flat I:17/17 V:993
0.000000055 flat I:-1/-1 V:53
0.000000049 flat I:-1/-1 V:2678
0.000000041 fix1 I:17/17 V:993
0.000000014 fix1 I:-1/-1 V:53
0.000000022 fix1 I:-1/-1 V:2678
1.000009676 orig I:17/-1 V:993 (TIME)
1.000009553 orig I:-1/-1 V:53 (TIME)
1.000009855 orig I:-1/-1 V:2678 (TIME)

dotest: count=58 lo=6 hi=2569
0.000000048 flat I:31/31 V:1507
0.000000057 flat I:-1/-1 V:5
0.000000056 flat I:-1/-1 V:2570
0.000000015 fix1 I:31/31 V:1507
0.000000021 fix1 I:-1/-1 V:5
0.000000022 fix1 I:-1/-1 V:2570
1.000009519 orig I:31/-1 V:1507 (TIME)
1.000010096 orig I:-1/-1 V:5 (TIME)
1.000013881 orig I:-1/-1 V:2570 (TIME)

dotest: count=61 lo=55 hi=3223
0.000000063 flat I:54/54 V:2935
0.000000052 flat I:-1/-1 V:54
0.000000052 flat I:-1/-1 V:3224
0.000000033 fix1 I:54/54 V:2935
0.000000022 fix1 I:-1/-1 V:54
0.000000016 fix1 I:-1/-1 V:3224
1.000018225 orig I:54/-1 V:2935 (TIME)
1.000011663 orig I:-1/-1 V:54 (TIME)
1.000011810 orig I:-1/-1 V:3224 (TIME)

dotest: count=64 lo=24 hi=3309
0.000000056 flat I:42/42 V:2305
0.000000060 flat I:-1/-1 V:23
0.000000060 flat I:-1/-1 V:3310
0.000000015 fix1 I:42/42 V:2305
0.000000034 fix1 I:-1/-1 V:23
0.000000023 fix1 I:-1/-1 V:3310
1.000009987 orig I:42/-1 V:2305 (TIME)
1.000009362 orig I:-1/-1 V:23 (TIME)
1.000009670 orig I:-1/-1 V:3310 (TIME)

dotest: count=67 lo=22 hi=3548
0.000000030 flat I:21/21 V:1149
0.000000076 flat I:-1/-1 V:21
0.000000076 flat I:-1/-1 V:3549
0.000000041 fix1 I:21/21 V:1149
0.000000016 fix1 I:-1/-1 V:21
0.000000018 fix1 I:-1/-1 V:3549
1.000009903 orig I:21/-1 V:1149 (TIME)
1.000014023 orig I:-1/-1 V:21 (TIME)
1.000009173 orig I:-1/-1 V:3549 (TIME)

dotest: count=70 lo=43 hi=3672
0.000000014 flat I:1/1 V:80
0.000000094 flat I:-1/-1 V:42
0.000000079 flat I:-1/-1 V:3673
0.000000021 fix1 I:1/1 V:80
0.000000017 fix1 I:-1/-1 V:42
0.000000024 fix1 I:-1/-1 V:3673
1.000009550 orig I:1/-1 V:80 (TIME)
1.000009619 orig I:-1/-1 V:42 (TIME)
1.000009878 orig I:-1/-1 V:3673 (TIME)

dotest: count=73 lo=96 hi=3334
0.000000046 flat I:38/38 V:1790
0.000000081 flat I:-1/-1 V:95
0.000000081 flat I:-1/-1 V:3335
0.000000022 fix1 I:38/38 V:1790
0.000000023 fix1 I:-1/-1 V:95
0.000000024 fix1 I:-1/-1 V:3335
1.000009914 orig I:38/-1 V:1790 (TIME)
1.000009592 orig I:-1/-1 V:95 (TIME)
1.000012527 orig I:-1/-1 V:3335 (TIME)

dotest: count=76 lo=29 hi=3658
0.000000077 flat I:67/67 V:3384
0.000000084 flat I:-1/-1 V:28
0.000000090 flat I:-1/-1 V:3659
0.000000033 fix1 I:67/67 V:3384
0.000000016 fix1 I:-1/-1 V:28
0.000000024 fix1 I:-1/-1 V:3659
1.000013745 orig I:67/-1 V:3384 (TIME)
1.000009361 orig I:-1/-1 V:28 (TIME)
1.000115935 orig I:-1/-1 V:3659 (TIME)

dotest: count=79 lo=80 hi=3719
0.000000074 flat I:64/64 V:3195
0.000000087 flat I:-1/-1 V:79
0.000000093 flat I:-1/-1 V:3720
0.000000015 fix1 I:64/64 V:3195
0.000000016 fix1 I:-1/-1 V:79
0.000000024 fix1 I:-1/-1 V:3720
1.000015493 orig I:64/-1 V:3195 (TIME)
1.000012758 orig I:-1/-1 V:79 (TIME)
1.000011825 orig I:-1/-1 V:3720 (TIME)

dotest: count=82 lo=65 hi=4759
0.000000062 flat I:54/54 V:3385
0.000000095 flat I:-1/-1 V:64
0.000000094 flat I:-1/-1 V:4760
0.000000018 fix1 I:54/54 V:3385
0.000000016 fix1 I:-1/-1 V:64
0.000000017 fix1 I:-1/-1 V:4760
1.000010221 orig I:54/-1 V:3385 (TIME)
1.000013208 orig I:-1/-1 V:64 (TIME)
1.000012146 orig I:-1/-1 V:4760 (TIME)

dotest: count=85 lo=37 hi=4072
0.000000037 flat I:24/24 V:1160
0.000000098 flat I:-1/-1 V:36
0.000000097 flat I:-1/-1 V:4073
0.000000023 fix1 I:24/24 V:1160
0.000000023 fix1 I:-1/-1 V:36
0.000000024 fix1 I:-1/-1 V:4073
1.000009917 orig I:24/-1 V:1160 (TIME)
1.000010126 orig I:-1/-1 V:36 (TIME)
1.000009681 orig I:-1/-1 V:4073 (TIME)

dotest: count=88 lo=80 hi=4413
0.000000033 flat I:22/22 V:1009
0.000000100 flat I:-1/-1 V:79
0.000000100 flat I:-1/-1 V:4414
0.000000015 fix1 I:22/22 V:1009
0.000000017 fix1 I:-1/-1 V:79
0.000000024 fix1 I:-1/-1 V:4414
1.000009871 orig I:22/-1 V:1009 (TIME)
1.000009935 orig I:-1/-1 V:79 (TIME)
1.000014026 orig I:-1/-1 V:4414 (TIME)

dotest: count=91 lo=32 hi=4993
0.000000098 flat I:88/88 V:4857
0.000000103 flat I:-1/-1 V:31
0.000000102 flat I:-1/-1 V:4994
0.000000016 fix1 I:88/88 V:4857
0.000000017 fix1 I:-1/-1 V:31
0.000000018 fix1 I:-1/-1 V:4994
1.000012311 orig I:88/-1 V:4857 (TIME)
1.000011487 orig I:-1/-1 V:31 (TIME)
1.000011817 orig I:-1/-1 V:4994 (TIME)

dotest: count=94 lo=40 hi=4409
0.000000081 flat I:73/73 V:3272
0.000000105 flat I:-1/-1 V:39
0.000000111 flat I:-1/-1 V:4410
0.000000022 fix1 I:73/73 V:3272
0.000000023 fix1 I:-1/-1 V:39
0.000000023 fix1 I:-1/-1 V:4410
1.000009915 orig I:73/-1 V:3272 (TIME)
1.000009373 orig I:-1/-1 V:39 (TIME)
1.000009815 orig I:-1/-1 V:4410 (TIME)

dotest: count=97 lo=46 hi=4978
0.000000070 flat I:62/62 V:3483
0.000000108 flat I:-1/-1 V:45
0.000000107 flat I:-1/-1 V:4979
0.000000016 fix1 I:62/62 V:3483
0.000000016 fix1 I:-1/-1 V:45
0.000000018 fix1 I:-1/-1 V:4979
1.000013970 orig I:62/-1 V:3483 (TIME)
1.000012102 orig I:-1/-1 V:45 (TIME)
1.000013793 orig I:-1/-1 V:4979 (TIME)

dotest: count=100 lo=83 hi=4704
0.000000109 flat I:99/99 V:4704
0.000000117 flat I:-1/-1 V:82
0.000000111 flat I:-1/-1 V:4705
0.000000023 fix1 I:99/99 V:4704
0.000000016 fix1 I:-1/-1 V:82
0.000000024 fix1 I:-1/-1 V:4705
1.000009811 orig I:99/-1 V:4704 (TIME)
1.000009868 orig I:-1/-1 V:82 (TIME)
1.000009902 orig I:-1/-1 V:4705 (TIME)
``````