I would like to thank everyone who offered their history files and/or message-id logs to run this test. I wound up using most of them for smaller runs during my construction of the CRC test program, and used an 18.2 million message-id data set supplied by Joe Greco for the final test runs shown below.
Using the program I posted earlier with one minor bug in the placement of ++total corrected, I ran the 18.2 million message-id data set with CRC's ranging from 16 to 64 bits. The number of collisions are shown below. The program is included at the bottom.
The lower numbered CRC's tended on collision rates nearing 100% after a certain number of samples, which is as expected. Once the test got beyond the noise floor, each additional bit of CRC cut the number of collisions down by approximately half. No collisions occured with the 18.2 million message-id's dataset once we got beyond CRC48, but one can extrapolate a collision rate of one message-id per 2.3 Trillion message-id's with a CRC64 from empirical data. The theoretical collision rate for CRC64 and 18.2 million mesage-id's is one collision every 2 trillion message-id's so we have good correspondance to theory.
I should have used a real CRC long ago rather then try to do something fancy with prime numbers. The 1.14 diablo release is going to use the CRC64 algorithm included at the end (well, actually CRC63 as I want to reserve one bit for future use). Besides, it's a good deal faster then the old prime-mod algorithm anyway as it only requires shift and xor ops to implement.
-Matt (dillon@backplane.com)
Summary, 18.2 million sample test dataset, number of collisions.
Raw data, collisions for 18.2 million sample data set in increments of 100,000 samples for CRC16 through CRC64. Note that near the end, CRC16 through CRC20 approach a 100% collision rate. No collisions occured with the test dataset beyond CRC-48.
SAMPLES CRC16 CRC17 CRC18 CRC19 CRC20 CRC21 CRC22 0.1M 48694 29762 17032 9070 4519 2274 1212 0.2M 137655 97436 60243 34119 17834 9211 4809 0.3M 235174 182198 121457 71883 39173 20303 10626 0.4M 334630 275232 194897 120208 67433 35624 18672 0.5M 434497 371788 277068 177992 102379 55094 28973 0.6M 534472 470260 364505 242833 143019 78184 41394 0.7M 634464 569530 456066 314036 189198 105006 55646 0.8M 734464 669213 550297 389973 240256 135019 72156 0.9M 834464 769050 646412 470339 295794 168415 91007 1.0M 934464 868987 743717 554420 356011 205050 111280 1.1M 1034464 968955 841834 640870 419364 244383 133311 1.2M 1134464 1068940 940621 729741 486134 286809 157443 1.3M 1234464 1168934 1039769 820321 555780 331720 183461 1.4M 1334464 1268929 1139183 912533 628092 379218 210872 1.5M 1434464 1368928 1238758 1006000 702876 429273 239867 1.6M 1534464 1468928 1338453 1100821 779956 481688 270883 1.7M 1634464 1568928 1438273 1196438 859240 536198 303568 1.8M 1734464 1668928 1538141 1292873 940251 592525 337916 1.9M 1834464 1768928 1638059 1389909 1023041 651033 373656 2.0M 1934464 1868928 1737994 1487422 1107333 711244 410826 2.1M 2034464 1968928 1837950 1585341 1193293 773717 449497 2.2M 2134464 2068928 1937912 1683661 1280182 837874 489659 2.3M 2234464 2168928 2037896 1782338 1368569 903329 531092 2.4M 2334464 2268928 2137886 1881219 1457974 970943 574008 2.5M 2434464 2368928 2237876 1980254 1548323 1040150 618300 2.6M 2534464 2468928 2337871 2079431 1639565 1110486 663715 2.7M 2634464 2568928 2437865 2178796 1731494 1182295 710659 2.8M 2734464 2668928 2537864 2278265 1824318 1255416 758787 2.9M 2834464 2768928 2637862 2377821 1917637 1329614 808881 3.0M 2934464 2868928 2737860 2477444 2011671 1404983 859560 3.1M 3034464 2968928 2837860 2577106 2106181 1481548 911427 3.2M 3134464 3068928 2937858 2676871 2201256 1559161 964548 3.3M 3234464 3168928 3037857 2776663 2296730 1637708 1018633 3.4M 3334464 3268928 3137857 2876501 2392603 1717381 1073688 3.5M 3434464 3368928 3237856 2976378 2488787 1797956 1129971 3.6M 3534464 3468928 3337856 3076253 2585461 1879781 1187477 3.7M 3634464 3568928 3437856 3176153 2682289 1962055 1245443 3.8M 3734464 3668928 3537856 3276069 2779522 2045323 1304322 3.9M 3834464 3768928 3637856 3375998 2876899 2129150 1364051 4.0M 3934464 3868928 3737856 3475954 2974533 2213928 1425122 4.1M 4034464 3968928 3837856 3575923 3072335 2299534 1486908 4.2M 4134464 4068928 3937856 3675886 3170396 2385735 1549452 4.3M 4234464 4168928 4037856 3775858 3268655 2472571 1613325 4.4M 4334464 4268928 4137856 3875842 3367088 2559869 1677674 4.5M 4434464 4368928 4237856 3975821 3465615 2648049 1742853 4.6M 4534464 4468928 4337856 4075795 3564349 2736602 1809114 4.7M 4634464 4568928 4437856 4175777 3663217 2825783 1876105 4.8M 4734464 4668928 4537856 4275764 3762136 2915383 1943892 4.9M 4834464 4768928 4637856 4375759 3861176 3005392 2012783 5.0M 4934464 4868928 4737856 4475750 3960320 3095984 2081668 5.1M 5034464 4968928 4837856 4575741 4059520 3187080 2151865 5.2M 5134464 5068928 4937856 4675736 4158805 3278589 2222601 5.3M 5234464 5168928 5037856 4775732 4258124 3370362 2294052 5.4M 5334464 5268928 5137856 4875729 4357467 3462417 2366046 5.5M 5434464 5368928 5237856 4975724 4456955 3555133 2439316 5.6M 5534464 5468928 5337856 5075718 4556432 3647988 2512981 5.7M 5634464 5568928 5437856 5175717 4655960 3741135 2586722 5.8M 5734464 5668928 5537856 5275716 4755527 3834632 2661206 5.9M 5834464 5768928 5637856 5375716 4855124 3928457 2736335 6.0M 5934464 5868928 5737856 5475716 4954791 4022609 2812198 6.1M 6034464 5968928 5837856 5575716 5054480 4116952 2888493 6.2M 6134464 6068928 5937856 5675715 5154207 4211638 2965405 6.3M 6234464 6168928 6037856 5775713 5253974 4306725 3042750 6.4M 6334464 6268928 6137856 5875713 5353726 4401850 3120827 6.5M 6434464 6368928 6237856 5975713 5453499 4497092 3199416 6.6M 6534464 6468928 6337856 6075713 5553283 4592770 3278557 6.7M 6634464 6568928 6437856 6175712 5653122 4688523 3357916 6.8M 6734464 6668928 6537856 6275712 5752959 4784520 3437768 6.9M 6834464 6768928 6637856 6375712 5852821 4880693 3518173 7.0M 6934464 6868928 6737856 6475712 5952687 4977178 3599520 7.1M 7034464 6968928 6837856 6575712 6052594 5073701 3680754 7.2M 7134464 7068928 6937856 6675712 6152491 5170430 3762707 7.3M 7234464 7168928 7037856 6775712 6252398 5267324 3844797 7.4M 7334464 7268928 7137856 6875712 6352304 5364342 3927360 7.5M 7434464 7368928 7237856 6975712 6452219 5461484 4010446 7.6M 7534464 7468928 7337856 7075712 6552148 5558762 4093846 7.7M 7634464 7568928 7437856 7175712 6652078 5656120 4177539 7.8M 7734464 7668928 7537856 7275712 6752016 5753645 4261754 7.9M 7834464 7768928 7637856 7375712 6851972 5851322 4346179 8.0M 7934464 7868928 7737856 7475712 6951923 5949090 4431051 8.1M 8034464 7968928 7837856 7575712 7051873 6047013 4516301 8.2M 8134464 8068928 7937856 7675712 7151834 6145045 4602179 8.3M 8234464 8168928 8037856 7775712 7251795 6243049 4688051 8.4M 8334464 8268928 8137856 7875712 7351768 6341112 4774326 8.5M 8434464 8368928 8237856 7975712 7451730 6439315 4860966 8.6M 8534464 8468928 8337856 8075712 7551700 6537656 4947710 8.7M 8634464 8568928 8437856 8175712 7651675 6636098 5035000 8.8M 8734464 8668928 8537856 8275712 7751661 6734537 5122377 8.9M 8834464 8768928 8637856 8375712 7851639 6833018 5210463 9.0M 8934464 8868928 8737856 8475712 7951624 6931591 5298611 9.1M 9034464 8968928 8837856 8575712 8051609 7030228 5387026 9.2M 9134464 9068928 8937856 8675712 8151591 7128959 5475625 9.3M 9234464 9168928 9037856 8775712 8251571 7227687 5564631 9.4M 9334464 9268928 9137856 8875712 8351554 7326511 5653851 9.5M 9434464 9368928 9237856 8975712 8451536 7425413 5743199 9.6M 9534464 9468928 9337856 9075712 8551525 7524363 5832806 9.7M 9634464 9568928 9437856 9175712 8651512 7623334 5922809 9.8M 9734464 9668928 9537856 9275712 8751506 7722378 6012870 9.9M 9834464 9768928 9637856 9375712 8851498 7821467 6103347 10.0M 9934464 9868928 9737856 9475712 8951490 7920572 6193916 10.1M 10034464 9968928 9837856 9575712 9051482 8019780 6284966 10.2M 10134464 10068928 9937856 9675712 9151477 8118999 6376112 10.3M 10234464 10168928 10037856 9775712 9251476 8218282 6467503 10.4M 10334464 10268928 10137856 9875712 9351467 8317547 6558992 10.5M 10434464 10368928 10237856 9975712 9451464 8416839 6650539 10.6M 10534464 10468928 10337856 10075712 9551457 8516198 6742411 10.7M 10634464 10568928 10437856 10175712 9651456 8615549 6834358 10.8M 10734464 10668928 10537856 10275712 9751453 8714980 6926671 10.9M 10834464 10768928 10637856 10375712 9851450 8814399 7019247 11.0M 10934464 10868928 10737856 10475712 9951450 8913863 7111788 11.1M 11034464 10968928 10837856 10575712 10051446 9013352 7204576 11.2M 11134464 11068928 10937856 10675712 10151441 9112830 7297627 11.3M 11234464 11168928 11037856 10775712 10251439 9212377 7390677 11.4M 11334464 11268928 11137856 10875712 10351438 9311932 7484095 11.5M 11434464 11368928 11237856 10975712 10451438 9411486 7577501 11.6M 11534464 11468928 11337856 11075712 10551437 9511091 7671099 11.7M 11634464 11568928 11437856 11175712 10651437 9610721 7764779 11.8M 11734464 11668928 11537856 11275712 10751437 9710338 7858777 11.9M 11834464 11768928 11637856 11375712 10851437 9809986 7952825 12.0M 11934464 11868928 11737856 11475712 10951437 9909670 8046961 12.1M 12034464 11968928 11837856 11575712 11051435 10009330 8141240 12.2M 12134464 12068928 11937856 11675712 11151435 10109004 8235736 12.3M 12234464 12168928 12037856 11775712 11251434 10208737 8330319 12.4M 12334464 12268928 12137856 11875712 11351433 10308453 8425059 12.5M 12434464 12368928 12237856 11975712 11451433 10408196 8519955 12.6M 12534464 12468928 12337856 12075712 11551432 10507935 8614938 12.7M 12634464 12568928 12437856 12175712 11651432 10607685 8709879 12.8M 12734464 12668928 12537856 12275712 11751430 10707493 8804977 12.9M 12834464 12768928 12637856 12375712 11851429 10807250 8900269 13.0M 12934464 12868928 12737856 12475712 11951427 10907058 8995654 13.1M 13034464 12968928 12837856 12575712 12051427 11006869 9091102 13.2M 13134464 13068928 12937856 12675712 12151427 11106665 9186622 13.3M 13234464 13168928 13037856 12775712 12251426 11206488 9282381 13.4M 13334464 13268928 13137856 12875712 12351426 11306298 9378266 13.5M 13434464 13368928 13237856 12975712 12451426 11406124 9474206 13.6M 13534464 13468928 13337856 13075712 12551426 11505980 9570249 13.7M 13634464 13568928 13437856 13175712 12651425 11605825 9666364 13.8M 13734464 13668928 13537856 13275712 12751425 11705689 9762618 13.9M 13834464 13768928 13637856 13375712 12851425 11805548 9858964 14.0M 13934464 13868928 13737856 13475712 12951425 11905437 9955306 14.1M 14034464 13968928 13837856 13575712 13051425 12005318 10051762 14.2M 14134464 14068928 13937856 13675712 13151425 12105187 10148339 14.3M 14234464 14168928 14037856 13775712 13251425 12205080 10245025 14.4M 14334464 14268928 14137856 13875712 13351425 12304974 10341792 14.5M 14434464 14368928 14237856 13975712 13451425 12404875 10438678 14.6M 14534464 14468928 14337856 14075712 13551425 12504772 10535607 14.7M 14634464 14568928 14437856 14175712 13651425 12604690 10632601 14.8M 14734464 14668928 14537856 14275712 13751425 12704618 10729595 14.9M 14834464 14768928 14637856 14375712 13851425 12804530 10826613 15.0M 14934464 14868928 14737856 14475712 13951425 12904462 10923845 15.1M 15034464 14968928 14837856 14575712 14051424 13004397 11021244 15.2M 15134464 15068928 14937856 14675712 14151424 13104310 11118579 15.3M 15234464 15168928 15037856 14775712 14251424 13204247 11215898 15.4M 15334464 15268928 15137856 14875712 14351424 13304182 11313297 15.5M 15434464 15368928 15237856 14975712 14451424 13404110 11410738 15.6M 15534464 15468928 15337856 15075712 14551424 13504040 11508202 15.7M 15634464 15568928 15437856 15175712 14651424 13603999 11605874 15.8M 15734464 15668928 15537856 15275712 14751424 13703953 11703560 15.9M 15834464 15768928 15637856 15375712 14851424 13803901 11801236 16.0M 15934464 15868928 15737856 15475712 14951424 13903861 11899051 16.1M 16034464 15968928 15837856 15575712 15051424 14003807 11996838 16.2M 16134464 16068928 15937856 15675712 15151424 14103752 12094750 16.3M 16234464 16168928 16037856 15775712 15251424 14203708 12192725 16.4M 16334464 16268928 16137856 15875712 15351424 14303666 12290669 16.5M 16434464 16368928 16237856 15975712 15451424 14403623 12388681 16.6M 16534464 16468928 16337856 16075712 15551424 14503585 12486733 16.7M 16634464 16568928 16437856 16175712 15651424 14603553 12584808 16.8M 16734464 16668928 16537856 16275712 15751424 14703524 12682912 16.9M 16834464 16768928 16637856 16375712 15851424 14803488 12781127 17.0M 16934464 16868928 16737856 16475712 15951424 14903456 12879337 17.1M 17034464 16968928 16837856 16575712 16051424 15003425 12977634 17.2M 17134464 17068928 16937856 16675712 16151424 15103396 13076030 17.3M 17234464 17168928 17037856 16775712 16251424 15203379 13174358 17.4M 17334464 17268928 17137856 16875712 16351424 15303355 13272762 17.5M 17434464 17368928 17237856 16975712 16451424 15403335 13371202 17.6M 17534464 17468928 17337856 17075712 16551424 15503319 13469702 17.7M 17634464 17568928 17437856 17175712 16651424 15603292 13568257 17.8M 17734464 17668928 17537856 17275712 16751424 15703269 13666849 17.9M 17834464 17768928 17637856 17375712 16851424 15803253 13765429 18.0M 17934464 17868928 17737856 17475712 16951424 15903234 13863977 18.1M 18034464 17968928 17837856 17575712 17051424 16003219 13962602 18.2M 18134464 18068928 17937856 17675712 17151424 16103198 14061250 SAMPLES CRC23 CRC24 CRC25 CRC26 CRC27 CRC28 CRC29 0.1M 598 306 137 70 33 32 6 0.2M 2335 1234 566 286 148 80 36 0.3M 5306 2735 1297 660 338 185 76 0.4M 9430 4829 2366 1184 593 317 136 0.5M 14681 7449 3695 1874 921 480 212 0.6M 21107 10766 5245 2713 1329 693 298 0.7M 28501 14579 7107 3685 1816 904 418 0.8M 37024 18949 9289 4775 2368 1200 552 0.9M 46627 24062 11747 6030 2999 1535 726 1.0M 57487 29702 14566 7434 3696 1883 900 1.1M 69275 35841 17618 8982 4420 2278 1085 1.2M 82141 42418 20918 10651 5242 2735 1276 1.3M 96156 49607 24643 12528 6177 3183 1499 1.4M 111276 57246 28584 14504 7199 3696 1758 1.5M 127029 65713 32852 16703 8258 4216 2014 1.6M 143865 74504 37372 18965 9457 4783 2301 1.7M 161585 83821 42201 21422 10655 5389 2619 1.8M 180441 93854 47342 24001 11889 6021 2951 1.9M 200263 104260 52762 26616 13185 6772 3319 2.0M 221162 115303 58522 29495 14641 7464 3695 2.1M 242900 126968 64519 32496 16135 8248 4043 2.2M 265379 138820 70649 35669 17693 9107 4425 2.3M 288571 151326 77168 38938 19352 9945 4823 2.4M 313292 164446 83828 42437 21123 10814 5259 2.5M 338649 178029 90793 46129 22904 11731 5707 2.6M 364782 191998 98126 49769 24770 12694 6162 2.7M 391948 206469 105679 53707 26723 13659 6674 2.8M 419944 221809 113607 57564 28802 14709 7193 2.9M 448832 237389 121759 61602 30890 15774 7706 3.0M 478396 253470 130141 65867 33047 16816 8240 3.1M 508687 270291 138637 70316 35271 17905 8812 3.2M 540217 287476 147678 74859 37606 19129 9408 3.3M 572296 305265 156955 79640 39914 20350 10023 3.4M 605420 323515 166486 84549 42430 21573 10604 3.5M 638872 342001 176178 89627 44887 22792 11253 3.6M 673129 361187 186194 94767 47494 24140 11900 3.7M 708473 380771 196431 100218 50156 25444 12592 3.8M 744369 400876 206800 105706 52979 26836 13295 3.9M 780955 421301 217722 111263 55733 28324 14002 4.0M 818390 442216 228815 117014 58573 29743 14807 4.1M 856571 463657 240135 122766 61487 31332 15604 4.2M 895532 485462 252048 128679 64498 32896 16394 4.3M 935469 507851 264139 134772 67682 34453 17218 4.4M 975900 530708 276442 141257 70868 36074 18028 4.5M 1017374 554071 288827 147595 74039 37776 18855 4.6M 1059203 577909 301600 154174 77331 39428 19643 4.7M 1101552 602257 314549 160859 80834 41170 20477 4.8M 1144992 626778 327859 167784 84408 42867 21341 4.9M 1188794 651887 341437 174827 87939 44739 22290 5.0M 1233483 677637 355189 181913 91607 46549 23210 5.1M 1278421 703639 369263 189188 95288 48468 24240 5.2M 1324268 730216 383778 196721 99069 50336 25218 5.3M 1370968 757144 398346 204267 103016 52277 26184 5.4M 1417902 784180 413025 211841 106849 54250 27094 5.5M 1465747 811487 428132 219655 110759 56255 28133 5.6M 1514383 839518 443263 227626 114699 58339 29120 5.7M 1563810 868006 458810 235669 118800 60468 30139 5.8M 1613471 896956 474399 243918 123037 62585 31232 5.9M 1663949 926603 490449 252118 127315 64666 32315 6.0M 1714516 956492 506785 260532 131701 66899 33472 6.1M 1765810 986562 523349 269151 136225 69092 34620 6.2M 1817739 1017192 540065 277971 140628 71259 35762 6.3M 1870430 1048318 557046 286727 145164 73579 36951 6.4M 1923638 1079833 574308 295666 149822 75931 38072 6.5M 1977181 1111621 591828 304971 154424 78272 39252 6.6M 2031459 1144030 609595 314167 159226 80721 40395 6.7M 2085994 1176831 627683 323524 164060 83122 41675 6.8M 2141515 1210039 646090 333102 168887 85585 42911 6.9M 2197223 1243855 664616 342720 173795 88099 44193 7.0M 2253569 1277740 683171 352551 178905 90730 45393 7.1M 2310351 1312201 702035 362443 183878 93317 46719 7.2M 2367654 1346849 721347 372719 189118 95933 48061 7.3M 2425624 1382084 740728 383077 194279 98579 49507 7.4M 2483970 1417656 760522 393410 199683 101318 50878 7.5M 2542727 1453590 780226 403876 204928 104062 52287 7.6M 2602062 1489780 800270 414469 210419 106871 53734 7.7M 2661912 1526505 820536 425143 215961 109711 55135 7.8M 2722210 1563733 841047 436063 221645 112607 56571 7.9M 2782962 1601126 861733 447190 227269 115499 58002 8.0M 2844204 1638734 882940 458253 233187 118369 59377 8.1M 2905933 1676572 904301 469550 238933 121290 60813 8.2M 2968083 1715260 925998 480909 244884 124155 62297 8.3M 3030784 1754147 947997 492632 250902 127264 63749 8.4M 3093943 1793254 970024 504392 256839 130274 65237 8.5M 3157444 1832970 992239 516154 263022 133460 66790 8.6M 3221068 1872706 1014848 528065 269138 136573 68376 8.7M 3285260 1912830 1037537 540147 275389 139855 70009 8.8M 3349847 1953431 1060607 552455 281775 143027 71640 8.9M 3414900 1994427 1083885 564788 288229 146179 73270 9.0M 3480488 2036025 1107439 577146 294617 149512 74914 9.1M 3546460 2077748 1131341 589682 300996 152798 76575 9.2M 3612868 2119929 1155187 602578 307633 156161 78284 9.3M 3679701 2162297 1179455 615511 314329 159465 79963 9.4M 3747010 2204984 1203731 628627 321069 162887 81649 9.5M 3814413 2248449 1228279 641663 327926 166447 83343 9.6M 3882334 2291530 1253011 654731 334816 169884 85126 9.7M 3950743 2335211 1278081 668064 341818 173394 86907 9.8M 4018912 2379492 1303287 681715 348896 176927 88708 9.9M 4088083 2424026 1328878 695455 356134 180502 90526 10.0M 4157313 2468796 1354647 709235 363253 184126 92350 10.1M 4227398 2513755 1380688 723112 370404 187748 94204 10.2M 4297481 2558656 1406727 737107 377737 191364 96045 10.3M 4368102 2604129 1433107 751260 385239 195041 98009 10.4M 4438798 2650293 1459641 765752 392742 198809 99969 10.5M 4510042 2696494 1486393 780126 400293 202587 101951 10.6M 4581494 2743142 1513628 794526 407826 206438 103843 10.7M 4653451 2790066 1540729 809317 415499 210375 105818 10.8M 4725616 2837553 1567949 824385 423295 214123 107759 10.9M 4798109 2885065 1595824 839558 431065 217998 109799 11.0M 4870833 2933014 1623715 854401 438894 221970 111864 11.1M 4944023 2981195 1651667 869529 446739 225993 113931 11.2M 5017662 3029551 1680099 884896 454551 229991 115921 11.3M 5091586 3078432 1708619 900291 462611 234149 117973 11.4M 5165891 3127402 1737305 915864 470699 238213 120022 11.5M 5240274 3177024 1766263 931547 478811 242494 122187 11.6M 5315253 3226697 1795435 947538 487157 246682 124342 11.7M 5390388 3276789 1824857 963453 495528 250924 126400 11.8M 5465773 3327075 1854324 979526 503966 255168 128558 11.9M 5541510 3377708 1884039 995634 512374 259459 130703 12.0M 5617513 3428716 1913872 1011852 520970 263895 132913 12.1M 5693926 3480028 1944058 1028277 529569 268349 135123 12.2M 5770390 3531628 1974367 1044907 538294 272762 137362 12.3M 5847300 3583160 2004936 1061755 547087 277165 139608 12.4M 5924285 3635217 2035678 1078559 555885 281660 141920 12.5M 6001710 3687514 2066558 1095554 564778 286246 144185 12.6M 6079098 3740241 2097803 1112416 573656 290780 146435 12.7M 6156852 3793168 2129166 1129462 582679 295409 148752 12.8M 6234991 3846455 2160857 1146942 591699 300053 151066 12.9M 6313305 3899816 2192755 1164452 600923 304684 153359 13.0M 6391805 3953652 2224742 1181916 610099 309438 155758 13.1M 6470670 4007729 2257006 1199917 619350 314208 158135 13.2M 6549585 4061961 2289450 1217667 628682 318966 160595 13.3M 6629008 4116612 2322142 1235564 637862 323755 163051 13.4M 6708690 4171491 2354916 1253641 647345 328605 165509 13.5M 6788670 4226641 2387936 1271963 656969 333473 168030 13.6M 6868611 4282035 2421130 1290288 666538 338347 170481 13.7M 6948959 4337624 2454599 1308817 676284 343233 173033 13.8M 7029578 4393669 2488210 1327388 686199 348272 175610 13.9M 7110350 4449972 2522082 1345862 696013 353394 178152 14.0M 7191282 4506534 2556145 1364605 705930 358453 180769 14.1M 7272330 4563570 2590291 1383542 715940 363658 183344 14.2M 7353898 4620464 2624855 1402482 725903 368824 185983 14.3M 7435652 4677820 2659181 1421719 735908 374015 188678 14.4M 7517384 4735237 2693761 1441152 745999 379321 191295 14.5M 7599508 4792978 2728745 1460592 756190 384647 193903 14.6M 7682109 4850729 2763886 1480268 766496 389859 196492 14.7M 7764740 4909089 2799205 1499695 776823 395380 199242 14.8M 7847673 4967248 2834418 1519422 787405 400734 201999 14.9M 7930708 5026034 2869953 1539365 797882 406243 204736 15.0M 8014101 5084718 2906005 1559431 808712 411700 207448 15.1M 8098470 5143511 2941725 1579422 819426 417066 210173 15.2M 8182415 5202876 2977903 1599562 830197 422610 212874 15.3M 8266184 5262744 3014356 1619957 840902 428061 215697 15.4M 8350008 5322434 3051127 1640445 851750 433659 218539 15.5M 8433990 5382231 3088288 1660993 862623 439354 221429 15.6M 8518595 5442684 3125526 1681579 873448 445058 224222 15.7M 8603030 5503319 3162868 1702220 884636 450645 227145 15.8M 8687708 5564179 3200416 1723095 895735 456224 230029 15.9M 8772689 5625449 3237976 1744179 906845 461952 232930 16.0M 8857973 5686672 3275817 1765436 918138 467618 235861 16.1M 8943288 5748209 3313973 1786788 929331 473402 238842 16.2M 9028668 5810109 3351938 1808177 940389 479146 241816 16.3M 9114163 5872118 3390118 1829751 951696 485017 244776 16.4M 9200121 5934331 3428694 1851395 963180 490947 247822 16.5M 9286007 5996612 3467221 1872875 974620 496944 250882 16.6M 9372012 6059317 3506292 1894849 986234 502734 253973 16.7M 9458202 6122215 3545563 1917044 997824 508770 257098 16.8M 9544827 6185514 3585185 1939007 1009459 514758 260095 16.9M 9631424 6248792 3624656 1961210 1021186 520766 263145 17.0M 9717886 6312228 3664147 1983486 1033057 526828 266255 17.1M 9804653 6376231 3704077 2005842 1045006 533034 269413 17.2M 9891451 6440246 3744092 2028282 1056942 539151 272609 17.3M 9978615 6504484 3784090 2050970 1068949 545393 275829 17.4M 10066095 6568897 3824279 2073908 1080972 551746 279052 17.5M 10153638 6633419 3864988 2096617 1093007 558241 282168 17.6M 10241316 6698409 3905771 2119439 1105345 564643 285307 17.7M 10329060 6763735 3946805 2142721 1117568 571041 288589 17.8M 10416956 6829189 3987814 2165682 1129935 577460 291925 17.9M 10505125 6894783 4028719 2188977 1142181 583945 295143 18.0M 10593200 6960451 4070229 2212196 1154546 590442 298462 18.1M 10681658 7026271 4111702 2235718 1167082 596914 301830 18.2M 10770169 7092360 4153742 2259269 1179721 603421 305089 SAMPLES CRC30 CRC31 CRC32 CRC33 CRC34 CRC35 CRC36 0.1M 5 1 3 0 0 0 0 0.2M 14 12 5 3 0 1 0 0.3M 40 24 7 8 6 3 1 0.4M 73 37 20 10 9 3 3 0.5M 110 65 29 16 12 4 4 0.6M 161 86 44 22 14 6 5 0.7M 219 121 66 33 14 8 5 0.8M 292 151 84 41 19 9 5 0.9M 370 195 104 53 26 11 5 1.0M 455 238 124 68 29 12 6 1.1M 557 281 149 78 32 15 8 1.2M 669 350 178 88 38 17 12 1.3M 786 401 213 93 42 19 14 1.4M 924 472 240 105 43 24 14 1.5M 1055 533 265 120 50 29 16 1.6M 1222 592 302 133 58 37 19 1.7M 1364 662 345 152 61 42 24 1.8M 1520 744 378 171 74 47 25 1.9M 1700 825 413 192 90 54 28 2.0M 1905 910 465 219 108 60 30 2.1M 2125 1004 528 239 116 68 33 2.2M 2335 1121 587 270 124 78 37 2.3M 2537 1210 632 288 136 86 43 2.4M 2742 1328 680 314 151 95 48 2.5M 2974 1446 747 348 167 99 51 2.6M 3198 1533 808 375 180 110 56 2.7M 3455 1655 882 417 194 117 58 2.8M 3705 1772 954 447 212 125 63 2.9M 3959 1895 1010 482 231 143 65 3.0M 4220 2023 1085 509 250 157 69 3.1M 4492 2181 1153 547 268 162 70 3.2M 4759 2326 1238 582 292 171 73 3.3M 5075 2469 1339 623 311 182 76 3.4M 5401 2633 1427 673 333 191 80 3.5M 5677 2779 1506 708 357 205 93 3.6M 6026 2951 1581 758 384 218 97 3.7M 6364 3121 1669 804 413 232 100 3.8M 6708 3283 1757 835 430 244 103 3.9M 7076 3471 1834 880 452 255 106 4.0M 7439 3661 1927 919 473 266 113 4.1M 7833 3841 2027 962 499 270 117 4.2M 8246 4053 2112 1007 533 278 120 4.3M 8627 4254 2205 1047 554 291 124 4.4M 9033 4448 2290 1100 573 302 125 4.5M 9468 4661 2403 1153 604 313 130 4.6M 9914 4853 2497 1195 625 327 138 4.7M 10357 5078 2584 1253 646 340 143 4.8M 10802 5290 2696 1300 679 349 148 4.9M 11251 5503 2812 1350 704 364 154 5.0M 11717 5751 2936 1400 737 375 160 5.1M 12162 5962 3049 1458 770 391 165 5.2M 12657 6200 3175 1526 789 406 172 5.3M 13148 6434 3293 1591 822 417 178 5.4M 13633 6667 3436 1654 864 430 188 5.5M 14097 6921 3553 1723 910 448 199 5.6M 14572 7158 3667 1777 944 459 210 5.7M 15059 7425 3799 1832 971 478 218 5.8M 15564 7700 3935 1895 1004 495 223 5.9M 16091 7976 4067 1950 1037 509 229 6.0M 16659 8246 4215 2026 1073 534 236 6.1M 17254 8532 4362 2095 1112 555 244 6.2M 17798 8790 4510 2157 1148 570 248 6.3M 18420 9085 4651 2245 1187 590 258 6.4M 19001 9380 4825 2300 1225 601 268 6.5M 19592 9678 4964 2365 1248 615 276 6.6M 20205 9987 5119 2441 1287 637 284 6.7M 20808 10297 5259 2531 1331 650 294 6.8M 21472 10625 5412 2600 1361 676 302 6.9M 22096 10941 5548 2675 1406 701 313 7.0M 22729 11258 5715 2748 1448 721 321 7.1M 23342 11558 5879 2836 1486 746 332 7.2M 24041 11916 6019 2924 1532 763 342 7.3M 24704 12273 6168 3009 1567 782 350 7.4M 25330 12603 6336 3112 1605 799 360 7.5M 26026 12970 6498 3198 1652 824 376 7.6M 26735 13314 6696 3274 1709 839 380 7.7M 27454 13674 6875 3371 1757 861 392 7.8M 28206 14045 7054 3481 1802 887 399 7.9M 28985 14434 7249 3573 1842 913 410 8.0M 29710 14794 7438 3687 1883 938 416 8.1M 30449 15167 7621 3779 1917 958 428 8.2M 31227 15563 7825 3868 1976 988 440 8.3M 31961 15903 8007 3963 2018 1013 454 8.4M 32797 16276 8198 4057 2069 1040 467 8.5M 33583 16681 8425 4150 2125 1059 476 8.6M 34361 17108 8654 4256 2172 1082 483 8.7M 35178 17523 8852 4373 2223 1111 498 8.8M 36012 17952 9038 4470 2270 1133 506 8.9M 36815 18365 9245 4563 2325 1163 516 9.0M 37651 18780 9479 4665 2368 1186 529 9.1M 38487 19235 9680 4778 2424 1213 546 9.2M 39342 19662 9904 4908 2463 1236 558 9.3M 40204 20111 10096 5015 2512 1264 568 9.4M 41091 20551 10331 5124 2560 1293 580 9.5M 41938 21011 10555 5214 2601 1332 597 9.6M 42800 21427 10769 5332 2662 1367 611 9.7M 43735 21870 10981 5447 2711 1388 625 9.8M 44634 22288 11210 5573 2773 1426 644 9.9M 45530 22731 11436 5686 2835 1449 652 10.0M 46438 23254 11632 5806 2895 1468 673 10.1M 47382 23687 11873 5923 2940 1493 686 10.2M 48408 24141 12107 6042 2996 1518 703 10.3M 49328 24617 12346 6165 3070 1544 710 10.4M 50264 25093 12593 6302 3138 1570 728 10.5M 51204 25574 12855 6426 3194 1608 741 10.6M 52219 26095 13111 6542 3263 1639 758 10.7M 53182 26614 13358 6659 3333 1666 772 10.8M 54136 27110 13599 6774 3404 1694 787 10.9M 55135 27646 13864 6895 3464 1723 805 11.0M 56179 28181 14130 7037 3513 1766 827 11.1M 57241 28667 14358 7151 3581 1795 838 11.2M 58307 29175 14617 7287 3644 1832 852 11.3M 59374 29686 14885 7417 3710 1870 872 11.4M 60438 30202 15161 7563 3786 1897 890 11.5M 61468 30806 15414 7693 3861 1934 909 11.6M 62586 31353 15707 7843 3913 1971 925 11.7M 63662 31921 15995 7975 3980 2007 939 11.8M 64767 32464 16272 8121 4049 2039 953 11.9M 65897 32981 16545 8269 4108 2076 967 12.0M 66985 33509 16845 8415 4172 2124 985 12.1M 68102 34069 17123 8547 4237 2156 1005 12.2M 69190 34659 17398 8677 4303 2185 1018 12.3M 70382 35204 17669 8825 4386 2242 1038 12.4M 71516 35825 17955 8962 4458 2280 1061 12.5M 72756 36455 18259 9090 4542 2310 1071 12.6M 73997 37059 18549 9209 4629 2342 1080 12.7M 75137 37678 18854 9351 4708 2363 1103 12.8M 76299 38247 19150 9491 4785 2408 1124 12.9M 77493 38850 19471 9662 4866 2442 1141 13.0M 78651 39403 19777 9796 4936 2481 1160 13.1M 79844 40002 20081 9967 4999 2513 1174 13.2M 81058 40633 20368 10107 5081 2543 1194 13.3M 82236 41261 20669 10240 5151 2585 1215 13.4M 83469 41874 20970 10393 5233 2622 1234 13.5M 84700 42521 21304 10573 5326 2662 1254 13.6M 85951 43170 21652 10747 5399 2709 1277 13.7M 87223 43782 21981 10896 5501 2754 1300 13.8M 88494 44437 22300 11024 5571 2795 1318 13.9M 89791 45049 22605 11176 5662 2832 1340 14.0M 91070 45680 22967 11342 5743 2874 1358 14.1M 92347 46305 23306 11497 5834 2933 1383 14.2M 93635 46972 23656 11701 5917 2976 1401 14.3M 95019 47648 23981 11870 5985 3035 1426 14.4M 96365 48364 24299 12019 6057 3068 1446 14.5M 97729 49043 24620 12203 6130 3120 1471 14.6M 99114 49774 24949 12355 6207 3156 1488 14.7M 100474 50460 25291 12531 6282 3199 1513 14.8M 101838 51157 25664 12678 6348 3238 1546 14.9M 103199 51886 26018 12852 6447 3279 1578 15.0M 104561 52562 26337 13045 6544 3317 1604 15.1M 105950 53225 26686 13225 6656 3366 1622 15.2M 107447 53905 27040 13395 6746 3411 1644 15.3M 108912 54637 27370 13572 6837 3448 1667 15.4M 110277 55329 27727 13724 6933 3501 1687 15.5M 111673 56046 28109 13911 7025 3535 1714 15.6M 113141 56768 28469 14101 7094 3580 1733 15.7M 114587 57501 28818 14277 7174 3630 1760 15.8M 116054 58230 29180 14451 7258 3686 1786 15.9M 117459 58962 29544 14622 7354 3742 1807 16.0M 118907 59704 29923 14827 7466 3791 1830 16.1M 120412 60447 30307 15029 7563 3847 1847 16.2M 121895 61164 30692 15190 7664 3894 1866 16.3M 123428 61928 31046 15393 7752 3939 1891 16.4M 124961 62691 31444 15576 7839 3991 1920 16.5M 126444 63473 31815 15776 7948 4043 1938 16.6M 127945 64235 32207 16004 8046 4097 1962 16.7M 129517 64984 32588 16230 8148 4144 1984 16.8M 131019 65739 32974 16438 8244 4194 2010 16.9M 132553 66529 33358 16632 8351 4248 2036 17.0M 134113 67326 33756 16835 8444 4290 2060 17.1M 135661 68138 34135 17032 8553 4344 2086 17.2M 137279 68952 34510 17234 8665 4387 2114 17.3M 138840 69781 34891 17448 8765 4436 2136 17.4M 140575 70594 35276 17629 8858 4483 2161 17.5M 142290 71396 35726 17807 8955 4521 2189 17.6M 143864 72236 36174 17994 9072 4561 2214 17.7M 145485 73014 36600 18204 9167 4637 2241 17.8M 147093 73825 36971 18396 9261 4682 2260 17.9M 148720 74638 37388 18586 9357 4735 2289 18.0M 150358 75498 37804 18802 9452 4801 2305 18.1M 152014 76347 38195 19014 9551 4861 2324 18.2M 153722 77254 38638 19232 9652 4914 2343 SAMPLES CRC37 CRC38 CRC39 CRC40 CRC41 CRC42 CRC43 0.1M 0 0 0 0 0 0 0 0.2M 0 0 0 0 0 0 0 0.3M 1 0 0 0 0 0 0 0.4M 1 0 0 0 0 0 0 0.5M 2 0 0 0 0 0 0 0.6M 2 0 0 0 0 0 0 0.7M 2 0 0 0 0 0 0 0.8M 3 0 1 0 0 0 0 0.9M 4 0 1 0 0 0 0 1.0M 6 0 1 0 0 0 0 1.1M 6 0 1 0 0 0 0 1.2M 6 1 1 0 0 0 0 1.3M 8 1 2 0 0 0 0 1.4M 9 1 3 0 0 0 1 1.5M 11 1 3 2 1 0 1 1.6M 12 1 3 3 1 0 1 1.7M 14 3 4 3 1 0 1 1.8M 16 3 4 3 1 0 1 1.9M 17 3 4 3 1 0 1 2.0M 19 4 4 3 1 0 1 2.1M 20 4 4 3 2 0 1 2.2M 24 5 6 3 2 0 1 2.3M 24 5 6 3 2 0 1 2.4M 25 5 6 3 2 0 1 2.5M 27 6 7 3 2 0 1 2.6M 29 7 7 3 2 0 1 2.7M 30 8 7 3 2 0 1 2.8M 32 8 7 3 2 0 1 2.9M 34 10 7 3 2 0 1 3.0M 35 12 7 3 2 0 1 3.1M 36 14 8 5 2 0 1 3.2M 37 16 8 5 2 0 1 3.3M 41 22 9 5 2 0 1 3.4M 43 23 11 5 2 0 1 3.5M 49 24 12 5 2 0 1 3.6M 52 27 12 5 3 0 1 3.7M 54 29 13 8 3 0 1 3.8M 59 31 15 8 3 0 1 3.9M 60 34 16 10 3 0 1 4.0M 64 36 16 11 4 0 1 4.1M 67 36 18 11 4 0 1 4.2M 72 36 18 11 4 0 1 4.3M 77 36 19 11 4 0 1 4.4M 85 40 19 12 5 0 1 4.5M 86 42 20 12 5 0 1 4.6M 91 44 20 12 5 0 1 4.7M 94 46 22 12 5 0 1 4.8M 96 47 22 13 5 0 1 4.9M 99 49 23 13 5 0 1 5.0M 102 50 25 14 6 0 1 5.1M 106 52 27 15 7 0 2 5.2M 110 55 27 16 7 0 2 5.3M 114 57 27 16 7 0 2 5.4M 114 57 28 16 8 0 2 5.5M 115 58 28 16 9 1 2 5.6M 120 62 29 16 9 1 2 5.7M 125 65 30 17 9 1 2 5.8M 129 67 30 18 9 1 2 5.9M 130 68 30 18 9 1 2 6.0M 131 70 31 18 9 1 2 6.1M 133 72 33 19 9 1 2 6.2M 140 76 34 19 9 1 2 6.3M 146 78 34 19 10 1 2 6.4M 148 81 36 20 10 1 2 6.5M 149 82 42 21 10 1 2 6.6M 151 84 42 23 11 1 3 6.7M 158 86 43 23 12 1 3 6.8M 162 89 46 24 12 1 3 6.9M 165 93 46 25 12 1 3 7.0M 167 98 46 25 12 1 3 7.1M 172 100 47 25 12 1 3 7.2M 178 107 48 26 13 2 3 7.3M 185 108 50 27 13 2 3 7.4M 194 110 51 29 13 2 3 7.5M 206 111 51 29 14 2 3 7.6M 213 113 53 30 14 4 3 7.7M 219 117 54 32 14 4 3 7.8M 225 121 54 32 14 4 3 7.9M 234 125 55 32 14 4 3 8.0M 238 129 56 32 15 5 3 8.1M 247 133 58 33 15 5 3 8.2M 255 136 60 33 15 5 3 8.3M 259 139 64 33 15 5 3 8.4M 264 145 64 34 15 5 3 8.5M 270 151 67 37 15 5 3 8.6M 277 154 70 37 15 5 3 8.7M 288 156 70 39 15 7 3 8.8M 292 158 71 39 15 7 3 8.9M 297 167 72 40 15 7 3 9.0M 307 169 74 42 16 8 3 9.1M 312 172 74 42 17 8 3 9.2M 316 180 76 43 17 8 4 9.3M 320 181 79 44 17 9 5 9.4M 326 184 82 45 17 9 5 9.5M 335 187 83 46 17 10 5 9.6M 340 190 85 49 17 10 5 9.7M 346 190 87 50 17 10 5 9.8M 351 195 89 51 17 10 5 9.9M 361 199 89 54 17 11 5 10.0M 370 204 90 54 17 12 5 10.1M 376 206 91 54 18 13 5 10.2M 382 208 94 57 18 13 5 10.3M 388 212 98 57 18 13 5 10.4M 394 214 99 58 19 13 5 10.5M 398 220 101 60 19 13 5 10.6M 405 225 102 60 19 13 6 10.7M 415 231 103 62 20 13 6 10.8M 418 236 103 63 20 13 6 10.9M 428 244 103 63 21 13 6 11.0M 435 247 107 64 21 13 6 11.1M 444 251 111 65 21 13 6 11.2M 450 251 113 65 21 14 6 11.3M 459 259 113 68 24 14 6 11.4M 464 264 115 68 25 14 6 11.5M 466 267 116 69 26 14 6 11.6M 474 271 120 69 27 14 6 11.7M 481 274 122 69 27 14 6 11.8M 490 279 125 69 28 15 6 11.9M 498 287 126 72 28 15 7 12.0M 505 293 129 72 28 16 7 12.1M 512 298 132 72 29 17 7 12.2M 518 302 137 72 29 17 7 12.3M 523 310 138 74 29 18 7 12.4M 542 315 145 75 30 20 7 12.5M 555 320 147 77 30 20 7 12.6M 564 324 148 78 31 21 7 12.7M 573 326 150 79 33 21 7 12.8M 587 328 151 80 33 21 7 12.9M 599 332 155 82 35 21 7 13.0M 603 338 157 85 37 22 7 13.1M 615 341 162 86 38 22 8 13.2M 629 345 166 86 39 23 8 13.3M 639 349 169 86 39 23 8 13.4M 654 354 171 87 40 24 9 13.5M 661 360 173 89 40 24 9 13.6M 673 367 174 91 41 24 9 13.7M 682 369 178 91 41 25 9 13.8M 697 374 181 93 42 25 9 13.9M 713 377 183 98 43 25 10 14.0M 719 384 183 99 44 25 10 14.1M 728 393 186 101 45 26 10 14.2M 737 398 190 101 47 27 11 14.3M 748 401 196 101 47 27 12 14.4M 757 403 200 101 48 27 12 14.5M 764 408 200 101 48 27 12 14.6M 774 415 203 101 48 27 12 14.7M 783 417 205 102 49 28 12 14.8M 793 418 207 102 50 28 12 14.9M 802 425 208 102 51 29 13 15.0M 822 430 210 102 52 29 14 15.1M 827 434 212 102 53 29 14 15.2M 833 437 215 103 53 29 14 15.3M 847 442 218 104 54 29 14 15.4M 855 446 221 105 56 29 14 15.5M 867 452 225 106 56 29 14 15.6M 880 458 227 106 57 30 14 15.7M 891 467 228 109 57 32 14 15.8M 906 477 231 110 59 33 14 15.9M 915 482 234 111 59 33 14 16.0M 923 489 234 114 61 34 15 16.1M 943 496 240 114 61 35 15 16.2M 961 505 243 117 62 35 15 16.3M 975 511 245 118 63 35 16 16.4M 989 515 247 122 65 36 17 16.5M 998 521 248 122 65 37 17 16.6M 1012 531 249 123 65 38 17 16.7M 1020 533 250 123 66 40 17 16.8M 1033 539 253 128 66 40 17 16.9M 1043 546 254 129 67 41 17 17.0M 1054 550 257 129 69 42 17 17.1M 1067 555 260 130 70 42 18 17.2M 1083 561 263 133 70 44 19 17.3M 1090 573 266 135 70 46 20 17.4M 1096 586 271 137 71 46 20 17.5M 1108 594 275 139 72 46 20 17.6M 1120 597 280 140 72 48 21 17.7M 1134 603 287 142 72 48 21 17.8M 1146 608 287 146 73 48 21 17.9M 1162 614 291 147 73 50 21 18.0M 1176 621 293 149 73 50 21 18.1M 1185 626 298 150 75 51 21 18.2M 1204 637 302 152 75 52 21 SAMPLES CRC44 CRC45 CRC46 CRC47 CRC48 CRC49 CRC50 0.1M 0 0 0 0 0 0 0 0.2M 0 0 0 0 0 0 0 0.3M 0 0 0 0 0 0 0 0.4M 0 0 0 0 0 0 0 0.5M 0 0 0 0 0 0 0 0.6M 0 0 0 0 0 0 0 0.7M 0 0 0 0 0 0 0 0.8M 0 0 0 0 0 0 0 0.9M 0 0 0 0 0 0 0 1.0M 0 0 0 0 0 0 0 1.1M 0 0 0 0 0 0 0 1.2M 0 0 0 0 0 0 0 1.3M 0 0 0 0 0 0 0 1.4M 0 0 0 0 0 0 0 1.5M 0 0 0 0 0 0 0 1.6M 0 0 0 0 0 0 0 1.7M 0 0 0 0 0 0 0 1.8M 0 0 0 0 0 0 0 1.9M 0 0 0 0 0 0 0 2.0M 0 0 0 0 0 0 0 2.1M 0 0 0 0 0 0 0 2.2M 0 0 0 0 0 0 0 2.3M 0 0 0 0 0 0 0 2.4M 0 0 0 0 0 0 0 2.5M 0 0 0 0 0 0 0 2.6M 0 0 0 0 0 0 0 2.7M 0 0 0 0 0 0 0 2.8M 0 0 0 0 0 0 0 2.9M 0 0 0 0 0 0 0 3.0M 1 0 0 0 0 0 0 3.1M 1 0 0 0 0 0 0 3.2M 1 0 0 0 0 0 0 3.3M 1 0 0 0 0 0 0 3.4M 1 0 0 0 0 0 0 3.5M 1 0 0 0 0 0 0 3.6M 2 0 0 0 0 0 0 3.7M 3 0 0 0 0 0 0 3.8M 3 0 0 0 0 0 0 3.9M 3 0 0 0 0 0 0 4.0M 3 0 0 0 0 0 0 4.1M 3 0 0 0 0 0 0 4.2M 3 0 0 0 0 0 0 4.3M 3 0 0 0 0 0 0 4.4M 3 0 0 0 0 0 0 4.5M 3 0 0 0 0 0 0 4.6M 3 0 0 0 0 0 0 4.7M 3 0 0 0 0 0 0 4.8M 3 0 0 0 0 0 0 4.9M 3 0 0 0 0 0 0 5.0M 4 0 0 0 0 0 0 5.1M 4 0 0 0 0 0 0 5.2M 4 0 0 0 0 0 0 5.3M 4 0 0 0 0 0 0 5.4M 4 0 0 0 0 0 0 5.5M 4 0 0 0 0 0 0 5.6M 5 0 0 0 0 0 0 5.7M 5 0 0 0 0 0 0 5.8M 5 0 0 0 0 0 0 5.9M 5 0 0 0 0 0 0 6.0M 5 0 0 0 0 0 0 6.1M 5 0 0 0 0 0 0 6.2M 5 0 0 0 0 0 0 6.3M 5 0 0 0 0 0 0 6.4M 5 0 0 0 0 0 0 6.5M 5 0 0 0 0 0 0 6.6M 5 0 0 0 0 0 0 6.7M 5 0 0 0 0 0 0 6.8M 5 0 0 0 0 0 0 6.9M 5 0 0 0 0 0 0 7.0M 5 0 0 0 0 0 0 7.1M 5 0 0 0 0 0 0 7.2M 5 0 0 0 0 0 0 7.3M 5 0 0 0 0 0 0 7.4M 5 0 0 0 0 0 0 7.5M 5 0 0 0 0 0 0 7.6M 5 0 0 0 0 0 0 7.7M 5 0 0 0 0 0 0 7.8M 5 0 0 0 0 0 0 7.9M 5 1 0 0 0 0 0 8.0M 5 1 0 0 0 0 0 8.1M 5 1 0 0 0 0 0 8.2M 5 1 0 0 0 0 0 8.3M 5 1 0 0 0 0 0 8.4M 5 1 0 0 0 0 0 8.5M 5 1 0 0 0 0 0 8.6M 5 1 0 0 0 0 0 8.7M 5 1 0 0 0 0 0 8.8M 5 1 0 0 0 0 0 8.9M 5 2 0 0 0 0 0 9.0M 5 2 0 0 0 0 0 9.1M 5 2 0 0 0 0 0 9.2M 5 2 0 0 0 0 0 9.3M 5 2 0 0 0 0 0 9.4M 5 2 0 0 0 0 0 9.5M 5 2 1 0 0 0 0 9.6M 5 2 1 0 0 0 0 9.7M 5 2 1 0 0 0 0 9.8M 5 2 1 0 0 0 0 9.9M 5 2 1 0 0 0 0 10.0M 5 2 1 0 0 0 0 10.1M 6 2 1 0 0 0 0 10.2M 6 2 1 0 0 0 0 10.3M 6 2 1 0 0 0 0 10.4M 6 2 1 0 0 0 0 10.5M 6 2 1 0 0 0 0 10.6M 6 2 1 0 0 0 0 10.7M 6 2 1 0 0 0 0 10.8M 6 2 1 0 0 0 0 10.9M 6 2 1 0 0 0 0 11.0M 6 2 1 0 0 0 0 11.1M 6 2 1 0 0 0 0 11.2M 6 2 1 0 0 0 0 11.3M 6 2 1 0 0 0 0 11.4M 6 2 1 0 0 0 0 11.5M 6 2 1 0 0 0 0 11.6M 6 2 1 0 0 0 0 11.7M 6 2 1 0 0 0 0 11.8M 6 2 1 0 0 0 0 11.9M 6 2 1 0 0 0 0 12.0M 6 2 1 0 0 0 0 12.1M 6 2 1 0 0 0 0 12.2M 6 2 1 0 0 0 0 12.3M 6 2 1 0 0 0 0 12.4M 6 3 1 0 0 0 0 12.5M 6 4 1 0 0 0 0 12.6M 7 4 1 0 0 0 0 12.7M 7 4 1 0 0 0 0 12.8M 7 4 1 0 0 0 0 12.9M 7 4 1 0 0 0 0 13.0M 7 4 1 0 0 0 0 13.1M 7 4 1 0 0 0 0 13.2M 7 4 1 0 0 0 0 13.3M 7 4 1 0 0 0 0 13.4M 7 4 1 0 0 0 0 13.5M 7 4 1 0 0 0 0 13.6M 7 4 1 0 0 0 0 13.7M 7 4 1 0 0 0 0 13.8M 7 4 1 0 0 0 0 13.9M 7 4 1 0 0 0 0 14.0M 7 4 1 0 0 0 0 14.1M 7 4 1 0 0 0 0 14.2M 7 4 1 0 0 0 0 14.3M 7 4 1 0 0 0 0 14.4M 7 4 1 0 0 0 0 14.5M 7 4 1 0 0 0 0 14.6M 7 4 1 0 0 0 0 14.7M 7 4 1 0 0 0 0 14.8M 7 4 1 0 0 0 0 14.9M 7 4 1 0 0 0 0 15.0M 7 4 1 0 0 0 0 15.1M 8 4 1 0 0 0 0 15.2M 8 4 1 0 0 0 0 15.3M 8 4 1 0 0 0 0 15.4M 8 4 1 0 0 0 0 15.5M 9 4 1 1 0 0 0 15.6M 9 4 1 1 0 0 0 15.7M 11 4 1 1 0 0 0 15.8M 11 4 1 1 0 0 0 15.9M 11 4 1 1 0 0 0 16.0M 11 4 1 1 0 0 0 16.1M 11 4 1 1 0 0 0 16.2M 12 5 1 1 0 0 0 16.3M 12 5 1 1 0 0 0 16.4M 12 5 1 1 0 0 0 16.5M 12 5 1 1 0 0 0 16.6M 12 5 1 1 0 0 0 16.7M 13 5 1 1 0 0 0 16.8M 13 5 1 1 0 0 0 16.9M 13 5 1 1 0 0 0 17.0M 13 5 1 1 0 0 0 17.1M 13 5 1 1 0 0 0 17.2M 13 5 1 1 0 0 0 17.3M 13 6 1 1 0 0 0 17.4M 13 6 1 1 0 0 0 17.5M 13 6 1 1 0 0 0 17.6M 13 6 1 1 0 0 0 17.7M 13 6 1 1 0 0 0 17.8M 13 6 1 1 0 0 0 17.9M 13 6 1 1 0 0 0 18.0M 13 6 1 1 0 0 0 18.1M 13 6 1 1 0 0 0 18.2M 13 7 1 1 1 0 0 SAMPLES CRC51 CRC52 CRC53 CRC54 CRC55 CRC56 CRC57 0.1M 0 0 0 0 0 0 0 0.2M 0 0 0 0 0 0 0 0.3M 0 0 0 0 0 0 0 0.4M 0 0 0 0 0 0 0 0.5M 0 0 0 0 0 0 0 0.6M 0 0 0 0 0 0 0 0.7M 0 0 0 0 0 0 0 0.8M 0 0 0 0 0 0 0 0.9M 0 0 0 0 0 0 0 1.0M 0 0 0 0 0 0 0 1.1M 0 0 0 0 0 0 0 1.2M 0 0 0 0 0 0 0 1.3M 0 0 0 0 0 0 0 1.4M 0 0 0 0 0 0 0 1.5M 0 0 0 0 0 0 0 1.6M 0 0 0 0 0 0 0 1.7M 0 0 0 0 0 0 0 1.8M 0 0 0 0 0 0 0 1.9M 0 0 0 0 0 0 0 2.0M 0 0 0 0 0 0 0 2.1M 0 0 0 0 0 0 0 2.2M 0 0 0 0 0 0 0 2.3M 0 0 0 0 0 0 0 2.4M 0 0 0 0 0 0 0 2.5M 0 0 0 0 0 0 0 2.6M 0 0 0 0 0 0 0 2.7M 0 0 0 0 0 0 0 2.8M 0 0 0 0 0 0 0 2.9M 0 0 0 0 0 0 0 3.0M 0 0 0 0 0 0 0 3.1M 0 0 0 0 0 0 0 3.2M 0 0 0 0 0 0 0 3.3M 0 0 0 0 0 0 0 3.4M 0 0 0 0 0 0 0 3.5M 0 0 0 0 0 0 0 3.6M 0 0 0 0 0 0 0 3.7M 0 0 0 0 0 0 0 3.8M 0 0 0 0 0 0 0 3.9M 0 0 0 0 0 0 0 4.0M 0 0 0 0 0 0 0 4.1M 0 0 0 0 0 0 0 4.2M 0 0 0 0 0 0 0 4.3M 0 0 0 0 0 0 0 4.4M 0 0 0 0 0 0 0 4.5M 0 0 0 0 0 0 0 4.6M 0 0 0 0 0 0 0 4.7M 0 0 0 0 0 0 0 4.8M 0 0 0 0 0 0 0 4.9M 0 0 0 0 0 0 0 5.0M 0 0 0 0 0 0 0 5.1M 0 0 0 0 0 0 0 5.2M 0 0 0 0 0 0 0 5.3M 0 0 0 0 0 0 0 5.4M 0 0 0 0 0 0 0 5.5M 0 0 0 0 0 0 0 5.6M 0 0 0 0 0 0 0 5.7M 0 0 0 0 0 0 0 5.8M 0 0 0 0 0 0 0 5.9M 0 0 0 0 0 0 0 6.0M 0 0 0 0 0 0 0 6.1M 0 0 0 0 0 0 0 6.2M 0 0 0 0 0 0 0 6.3M 0 0 0 0 0 0 0 6.4M 0 0 0 0 0 0 0 6.5M 0 0 0 0 0 0 0 6.6M 0 0 0 0 0 0 0 6.7M 0 0 0 0 0 0 0 6.8M 0 0 0 0 0 0 0 6.9M 0 0 0 0 0 0 0 7.0M 0 0 0 0 0 0 0 7.1M 0 0 0 0 0 0 0 7.2M 0 0 0 0 0 0 0 7.3M 0 0 0 0 0 0 0 7.4M 0 0 0 0 0 0 0 7.5M 0 0 0 0 0 0 0 7.6M 0 0 0 0 0 0 0 7.7M 0 0 0 0 0 0 0 7.8M 0 0 0 0 0 0 0 7.9M 0 0 0 0 0 0 0 8.0M 0 0 0 0 0 0 0 8.1M 0 0 0 0 0 0 0 8.2M 0 0 0 0 0 0 0 8.3M 0 0 0 0 0 0 0 8.4M 0 0 0 0 0 0 0 8.5M 0 0 0 0 0 0 0 8.6M 0 0 0 0 0 0 0 8.7M 0 0 0 0 0 0 0 8.8M 0 0 0 0 0 0 0 8.9M 0 0 0 0 0 0 0 9.0M 0 0 0 0 0 0 0 9.1M 0 0 0 0 0 0 0 9.2M 0 0 0 0 0 0 0 9.3M 0 0 0 0 0 0 0 9.4M 0 0 0 0 0 0 0 9.5M 0 0 0 0 0 0 0 9.6M 0 0 0 0 0 0 0 9.7M 0 0 0 0 0 0 0 9.8M 0 0 0 0 0 0 0 9.9M 0 0 0 0 0 0 0 10.0M 0 0 0 0 0 0 0 10.1M 0 0 0 0 0 0 0 10.2M 0 0 0 0 0 0 0 10.3M 0 0 0 0 0 0 0 10.4M 0 0 0 0 0 0 0 10.5M 0 0 0 0 0 0 0 10.6M 0 0 0 0 0 0 0 10.7M 0 0 0 0 0 0 0 10.8M 0 0 0 0 0 0 0 10.9M 0 0 0 0 0 0 0 11.0M 0 0 0 0 0 0 0 11.1M 0 0 0 0 0 0 0 11.2M 0 0 0 0 0 0 0 11.3M 0 0 0 0 0 0 0 11.4M 0 0 0 0 0 0 0 11.5M 0 0 0 0 0 0 0 11.6M 0 0 0 0 0 0 0 11.7M 0 0 0 0 0 0 0 11.8M 0 0 0 0 0 0 0 11.9M 0 0 0 0 0 0 0 12.0M 0 0 0 0 0 0 0 12.1M 0 0 0 0 0 0 0 12.2M 0 0 0 0 0 0 0 12.3M 0 0 0 0 0 0 0 12.4M 0 0 0 0 0 0 0 12.5M 0 0 0 0 0 0 0 12.6M 0 0 0 0 0 0 0 12.7M 0 0 0 0 0 0 0 12.8M 0 0 0 0 0 0 0 12.9M 0 0 0 0 0 0 0 13.0M 0 0 0 0 0 0 0 13.1M 0 0 0 0 0 0 0 13.2M 0 0 0 0 0 0 0 13.3M 0 0 0 0 0 0 0 13.4M 0 0 0 0 0 0 0 13.5M 0 0 0 0 0 0 0 13.6M 0 0 0 0 0 0 0 13.7M 0 0 0 0 0 0 0 13.8M 0 0 0 0 0 0 0 13.9M 0 0 0 0 0 0 0 14.0M 0 0 0 0 0 0 0 14.1M 0 0 0 0 0 0 0 14.2M 0 0 0 0 0 0 0 14.3M 0 0 0 0 0 0 0 14.4M 0 0 0 0 0 0 0 14.5M 0 0 0 0 0 0 0 14.6M 0 0 0 0 0 0 0 14.7M 0 0 0 0 0 0 0 14.8M 0 0 0 0 0 0 0 14.9M 0 0 0 0 0 0 0 15.0M 0 0 0 0 0 0 0 15.1M 0 0 0 0 0 0 0 15.2M 0 0 0 0 0 0 0 15.3M 0 0 0 0 0 0 0 15.4M 0 0 0 0 0 0 0 15.5M 0 0 0 0 0 0 0 15.6M 0 0 0 0 0 0 0 15.7M 0 0 0 0 0 0 0 15.8M 0 0 0 0 0 0 0 15.9M 0 0 0 0 0 0 0 16.0M 0 0 0 0 0 0 0 16.1M 0 0 0 0 0 0 0 16.2M 0 0 0 0 0 0 0 16.3M 0 0 0 0 0 0 0 16.4M 0 0 0 0 0 0 0 16.5M 0 0 0 0 0 0 0 16.6M 0 0 0 0 0 0 0 16.7M 0 0 0 0 0 0 0 16.8M 0 0 0 0 0 0 0 16.9M 0 0 0 0 0 0 0 17.0M 0 0 0 0 0 0 0 17.1M 0 0 0 0 0 0 0 17.2M 0 0 0 0 0 0 0 17.3M 0 0 0 0 0 0 0 17.4M 0 0 0 0 0 0 0 17.5M 0 0 0 0 0 0 0 17.6M 0 0 0 0 0 0 0 17.7M 0 0 0 0 0 0 0 17.8M 0 0 0 0 0 0 0 17.9M 0 0 0 0 0 0 0 18.0M 0 0 0 0 0 0 0 18.1M 0 0 0 0 0 0 0 18.2M 0 0 0 0 0 0 0 SAMPLES CRC58 CRC59 CRC60 CRC61 CRC62 CRC63 CRC64 0.1M 0 0 0 0 0 0 0 0.2M 0 0 0 0 0 0 0 0.3M 0 0 0 0 0 0 0 0.4M 0 0 0 0 0 0 0 0.5M 0 0 0 0 0 0 0 0.6M 0 0 0 0 0 0 0 0.7M 0 0 0 0 0 0 0 0.8M 0 0 0 0 0 0 0 0.9M 0 0 0 0 0 0 0 1.0M 0 0 0 0 0 0 0 1.1M 0 0 0 0 0 0 0 1.2M 0 0 0 0 0 0 0 1.3M 0 0 0 0 0 0 0 1.4M 0 0 0 0 0 0 0 1.5M 0 0 0 0 0 0 0 1.6M 0 0 0 0 0 0 0 1.7M 0 0 0 0 0 0 0 1.8M 0 0 0 0 0 0 0 1.9M 0 0 0 0 0 0 0 2.0M 0 0 0 0 0 0 0 2.1M 0 0 0 0 0 0 0 2.2M 0 0 0 0 0 0 0 2.3M 0 0 0 0 0 0 0 2.4M 0 0 0 0 0 0 0 2.5M 0 0 0 0 0 0 0 2.6M 0 0 0 0 0 0 0 2.7M 0 0 0 0 0 0 0 2.8M 0 0 0 0 0 0 0 2.9M 0 0 0 0 0 0 0 3.0M 0 0 0 0 0 0 0 3.1M 0 0 0 0 0 0 0 3.2M 0 0 0 0 0 0 0 3.3M 0 0 0 0 0 0 0 3.4M 0 0 0 0 0 0 0 3.5M 0 0 0 0 0 0 0 3.6M 0 0 0 0 0 0 0 3.7M 0 0 0 0 0 0 0 3.8M 0 0 0 0 0 0 0 3.9M 0 0 0 0 0 0 0 4.0M 0 0 0 0 0 0 0 4.1M 0 0 0 0 0 0 0 4.2M 0 0 0 0 0 0 0 4.3M 0 0 0 0 0 0 0 4.4M 0 0 0 0 0 0 0 4.5M 0 0 0 0 0 0 0 4.6M 0 0 0 0 0 0 0 4.7M 0 0 0 0 0 0 0 4.8M 0 0 0 0 0 0 0 4.9M 0 0 0 0 0 0 0 5.0M 0 0 0 0 0 0 0 5.1M 0 0 0 0 0 0 0 5.2M 0 0 0 0 0 0 0 5.3M 0 0 0 0 0 0 0 5.4M 0 0 0 0 0 0 0 5.5M 0 0 0 0 0 0 0 5.6M 0 0 0 0 0 0 0 5.7M 0 0 0 0 0 0 0 5.8M 0 0 0 0 0 0 0 5.9M 0 0 0 0 0 0 0 6.0M 0 0 0 0 0 0 0 6.1M 0 0 0 0 0 0 0 6.2M 0 0 0 0 0 0 0 6.3M 0 0 0 0 0 0 0 6.4M 0 0 0 0 0 0 0 6.5M 0 0 0 0 0 0 0 6.6M 0 0 0 0 0 0 0 6.7M 0 0 0 0 0 0 0 6.8M 0 0 0 0 0 0 0 6.9M 0 0 0 0 0 0 0 7.0M 0 0 0 0 0 0 0 7.1M 0 0 0 0 0 0 0 7.2M 0 0 0 0 0 0 0 7.3M 0 0 0 0 0 0 0 7.4M 0 0 0 0 0 0 0 7.5M 0 0 0 0 0 0 0 7.6M 0 0 0 0 0 0 0 7.7M 0 0 0 0 0 0 0 7.8M 0 0 0 0 0 0 0 7.9M 0 0 0 0 0 0 0 8.0M 0 0 0 0 0 0 0 8.1M 0 0 0 0 0 0 0 8.2M 0 0 0 0 0 0 0 8.3M 0 0 0 0 0 0 0 8.4M 0 0 0 0 0 0 0 8.5M 0 0 0 0 0 0 0 8.6M 0 0 0 0 0 0 0 8.7M 0 0 0 0 0 0 0 8.8M 0 0 0 0 0 0 0 8.9M 0 0 0 0 0 0 0 9.0M 0 0 0 0 0 0 0 9.1M 0 0 0 0 0 0 0 9.2M 0 0 0 0 0 0 0 9.3M 0 0 0 0 0 0 0 9.4M 0 0 0 0 0 0 0 9.5M 0 0 0 0 0 0 0 9.6M 0 0 0 0 0 0 0 9.7M 0 0 0 0 0 0 0 9.8M 0 0 0 0 0 0 0 9.9M 0 0 0 0 0 0 0 10.0M 0 0 0 0 0 0 0 10.1M 0 0 0 0 0 0 0 10.2M 0 0 0 0 0 0 0 10.3M 0 0 0 0 0 0 0 10.4M 0 0 0 0 0 0 0 10.5M 0 0 0 0 0 0 0 10.6M 0 0 0 0 0 0 0 10.7M 0 0 0 0 0 0 0 10.8M 0 0 0 0 0 0 0 10.9M 0 0 0 0 0 0 0 11.0M 0 0 0 0 0 0 0 11.1M 0 0 0 0 0 0 0 11.2M 0 0 0 0 0 0 0 11.3M 0 0 0 0 0 0 0 11.4M 0 0 0 0 0 0 0 11.5M 0 0 0 0 0 0 0 11.6M 0 0 0 0 0 0 0 11.7M 0 0 0 0 0 0 0 11.8M 0 0 0 0 0 0 0 11.9M 0 0 0 0 0 0 0 12.0M 0 0 0 0 0 0 0 12.1M 0 0 0 0 0 0 0 12.2M 0 0 0 0 0 0 0 12.3M 0 0 0 0 0 0 0 12.4M 0 0 0 0 0 0 0 12.5M 0 0 0 0 0 0 0 12.6M 0 0 0 0 0 0 0 12.7M 0 0 0 0 0 0 0 12.8M 0 0 0 0 0 0 0 12.9M 0 0 0 0 0 0 0 13.0M 0 0 0 0 0 0 0 13.1M 0 0 0 0 0 0 0 13.2M 0 0 0 0 0 0 0 13.3M 0 0 0 0 0 0 0 13.4M 0 0 0 0 0 0 0 13.5M 0 0 0 0 0 0 0 13.6M 0 0 0 0 0 0 0 13.7M 0 0 0 0 0 0 0 13.8M 0 0 0 0 0 0 0 13.9M 0 0 0 0 0 0 0 14.0M 0 0 0 0 0 0 0 14.1M 0 0 0 0 0 0 0 14.2M 0 0 0 0 0 0 0 14.3M 0 0 0 0 0 0 0 14.4M 0 0 0 0 0 0 0 14.5M 0 0 0 0 0 0 0 14.6M 0 0 0 0 0 0 0 14.7M 0 0 0 0 0 0 0 14.8M 0 0 0 0 0 0 0 14.9M 0 0 0 0 0 0 0 15.0M 0 0 0 0 0 0 0 15.1M 0 0 0 0 0 0 0 15.2M 0 0 0 0 0 0 0 15.3M 0 0 0 0 0 0 0 15.4M 0 0 0 0 0 0 0 15.5M 0 0 0 0 0 0 0 15.6M 0 0 0 0 0 0 0 15.7M 0 0 0 0 0 0 0 15.8M 0 0 0 0 0 0 0 15.9M 0 0 0 0 0 0 0 16.0M 0 0 0 0 0 0 0 16.1M 0 0 0 0 0 0 0 16.2M 0 0 0 0 0 0 0 16.3M 0 0 0 0 0 0 0 16.4M 0 0 0 0 0 0 0 16.5M 0 0 0 0 0 0 0 16.6M 0 0 0 0 0 0 0 16.7M 0 0 0 0 0 0 0 16.8M 0 0 0 0 0 0 0 16.9M 0 0 0 0 0 0 0 17.0M 0 0 0 0 0 0 0 17.1M 0 0 0 0 0 0 0 17.2M 0 0 0 0 0 0 0 17.3M 0 0 0 0 0 0 0 17.4M 0 0 0 0 0 0 0 17.5M 0 0 0 0 0 0 0 17.6M 0 0 0 0 0 0 0 17.7M 0 0 0 0 0 0 0 17.8M 0 0 0 0 0 0 0 17.9M 0 0 0 0 0 0 0 18.0M 0 0 0 0 0 0 0 18.1M 0 0 0 0 0 0 0 18.2M 0 0 0 0 0 0 0
/* * UTIL/CRCTEST.C - CRC tester, by Matt Dillon * * This program is designed to test an N-bit CRC against a word dictionary * which you pipe into it. It is not required for normal diablo operation. * * Warning: This program will eat a lot of memory with large sets. If the * set is known to be unique, you can use -u to reduce the memory footprint. * * cat unique-words | CRCTEST [-u] [-v] [-q] [-h#] * * -h# set final hash size, in bits 16-64, Default is 64 bits. * -u assume unique input, do not store string contents * -v verbose output, print collisions * -q quiet output, do not print the count every 100,000 tests * * The expected number of collisions is (NSAMP * (NSAMP-1) / 2) / 2^CRCBITS. * * This is calculated through statistics. If you had 7 samples and an 8 bit * CRC (256 slots), the number of collisions is * * sample #1 0/256 * sample #2 1/256 * sample #3 2/256 * sample #4 3/256 * sample #5 4/256 * sample #6 5/256 * sample #7 6/256 * + sample #8 7/256 * ------------------------------ * [ 8*(8-1)/2 ] / 2^CRCBITS * * NOTE!! this only works if 2^CRCBITS is substantially larger then NSAMP * because we aren't taking into account the fact that a prior samples * may collide and not increment the chance of collision for later * samples. * * So, for example, a 36 bit CRC with 1M samples should result in around 7 * collisions. A 42 bit CRC with 1M samples should result in around 0.1 * collision. A 42 bit CRC with 3 million samples should result in around 1 * collision. */ #include#include #include #include typedef unsigned int hint_t; /* we want a 32 bit unsigned integer here */ typedef struct hash_t { hint_t h1; hint_t h2; } hash_t; typedef struct Hash { struct Hash *ha_Next; hash_t ha_Hv; } Hash; #define TESTHSIZE (4 * 1024 * 1024) #define TESTHMASK (TESTHSIZE - 1) void inithash(void); hash_t testhash(const char *p); Hash *HashAry[TESTHSIZE]; int UniqueOpt; int HashLimit = 64; int VerboseOpt = 0; int QuietOpt = 0; void *rmalloc(int bytes); int main(int ac, char **av) { char buf[256]; int count = 0; int total = 0; int skip = 100000; int i; for (i = 1; i < ac; ++i) { char *p = av[i]; if (*p == '-') { p += 2; switch(p[-1]) { case 'u': UniqueOpt = 1; break; case 'h': /* * We can't go above 64 for obvious reasons. We can't go * below 16 due to the way I generate the polynomial. */ HashLimit = strtol(p, NULL, 0); if (HashLimit > 64 || HashLimit < 16) { printf("valid values for -h between 16 & 64 inclusive\n"); exit(1); } break; case 'q': QuietOpt = 1; break; case 'v': VerboseOpt = 1; break; default: fprintf(stderr, "Unknown option: %s\n", p - 2); exit(1); } } } inithash(); while (fgets(buf, sizeof(buf), stdin) != NULL) { int i; hash_t hv; Hash *h; char *s; for (s = strtok(buf, " ,\t\r\n"); s; s = strtok(NULL, " ,\t\r\n")) { hv = testhash(s); i = (hv.h1 ^ hv.h2) & TESTHMASK; /* printf("%08x.%08x (%d) %s\n", hv.h1, hv.h2, i, s); */ for (h = HashAry[i]; h; h = h->ha_Next) { if (h->ha_Hv.h1 == hv.h1 && h->ha_Hv.h2 == hv.h2) { if (UniqueOpt || strcmp(s, (char *)(h + 1)) != 0) { if (VerboseOpt) { printf("Collision: %s\t%s\n", s, ((UniqueOpt) ? "?" : (char *)(h + 1)) ); } ++count; ++total; } break; } } if (h == NULL) { h = rmalloc(sizeof(Hash) + ((UniqueOpt) ? 0 : strlen(s) + 1)); h->ha_Next = HashAry[i]; h->ha_Hv = hv; if (UniqueOpt == 0) strcpy((char *)(h + 1), s); HashAry[i] = h; ++total; } } if (total >= skip) { if (QuietOpt == 0) { printf("Count %d/%d\n", count, total); fflush(stdout); } skip += 100000; } } printf("Count %d/%d\n", count, total); return(0); } /* * Poly: 0x00600340.00F0D50A * */ #define HINIT1 0xFAC432B1UL #define HINIT2 0x0CD5E44AUL #define POLY1 0x00600340UL #define POLY2 0x00F0D50BUL hash_t CrcXor[256]; hash_t Poly[64+1]; void inithash(void) { int i; /* * Polynomials to use for various crc sizes. Start with the 64 bit * polynomial and shift it right to generate the polynomials for fewer * bits. Note that the polynomial for N bits has no bit set above N-8. * This allows us to do a simple table-driven CRC. */ Poly[64].h1 = POLY1; Poly[64].h2 = POLY2; for (i = 63; i >= 16; --i) { Poly[i].h1 = Poly[i+1].h1 >> 1; Poly[i].h2 = (Poly[i+1].h2 >> 1) | ((Poly[i+1].h1 & 1) << 31) | 1; } for (i = 0; i < 256; ++i) { int j; int v = i; hash_t hv = { 0, 0 }; for (j = 0; j < 8; ++j, (v <<= 1)) { hv.h1 <<= 1; if (hv.h2 & 0x80000000UL) hv.h1 |= 1; hv.h2 = (hv.h2 << 1); if (v & 0x80) { hv.h1 ^= Poly[HashLimit].h1; hv.h2 ^= Poly[HashLimit].h2; } } CrcXor[i] = hv; } } /* * testhash() - do the CRC. The complexity is simply due to the programmable * nature of the number of bits. We extract the top 8 bits to * use as a table lookup to obtain the polynomial XOR 8 bits at * a time rather then 1 bit at a time. */ hash_t testhash(const char *p) { hash_t hv = { HINIT1, HINIT2 }; if (HashLimit <= 32) { int s = HashLimit - 8; hint_t m = (hint_t)-1 >> (32 - HashLimit); hv.h1 = 0; hv.h2 &= m; while (*p) { int i = (hv.h2 >> s) & 255; /* printf("i = %d %08lx\n", i, CrcXor[i].h2); */ hv.h2 = ((hv.h2 << 8) & m) ^ *p ^ CrcXor[i].h2; ++p; } } else if (HashLimit < 32+8) { int s2 = 32 + 8 - HashLimit; /* bits in byte from h2 */ hint_t m = (hint_t)-1 >> (64 - HashLimit); hv.h1 &= m; while (*p) { int i = ((hv.h1 << s2) | (hv.h2 >> (32 - s2))) & 255; hv.h1 = (((hv.h1 << 8) ^ (int)(hv.h2 >> 24)) & m) ^ CrcXor[i].h1; hv.h2 = (hv.h2 << 8) ^ *p ^ CrcXor[i].h2; ++p; } } else { int s = HashLimit - 40; hint_t m = (hint_t)-1 >> (64 - HashLimit); hv.h1 &= m; while (*p) { int i = (hv.h1 >> s) & 255; hv.h1 = ((hv.h1 << 8) & m) ^ (int)(hv.h2 >> 24) ^ CrcXor[i].h1; hv.h2 = (hv.h2 << 8) ^ *p ^ CrcXor[i].h2; ++p; } } /* printf("%08lx.%08lx\n", (long)hv.h1, (long)hv.h2); */ return(hv); } void * rmalloc(int bytes) { static char *RBuf = NULL; static int RSize = 0; bytes = (bytes + 3) & ~3; if (bytes > RSize) { RBuf = malloc(65536); RSize = 65536; } RBuf += bytes; RSize -= bytes; return(RBuf - bytes); }