Turns out (due to the birthday paradox) collisions are a lot more likely than I thought. However, simply choosing values with identical lower bits probably won't help. If there were a single xor to create the key, then it would make perfect sense. I guess that there is no easy solution but that a simple table will work well in most cases. I have a collision already at bit 48, which I found a little surprising. Perhaps the operation of maximizing hamming distance exacerbates the problem, which would explain why it does not seem to produce superior hashing.
Code: Select all
#include <stdlib.h>
#include <stdio.h>
static unsigned long long ham23bit[999] = {
0x64d79b552a559d7fULL,
0x44a572665a6ee240ULL,
0xeb2bf6dc3d72135cULL,
0xe3836981f9f82ea0ULL,
0x43a38212350ee392ULL,
0xce77502bffcacf8bULL,
0x5d8a82d90126f0e7ULL,
0xc0510c6f402c1e3cULL,
0x48d895bf8b69f77bULL,
0x1126b97be8c91ce2ULL,
0xf05e1c9dc2674be2ULL,
0xe4d5327a12874c1eULL,
0xbba2bbfbecbc239aULL,
0xc5704350b17f0215ULL,
0x823a67c5f88337e7ULL,
0x9fbe3cfcd1f08059ULL,
0xdc29309412e352b9ULL,
0x5a0ff7908b1b3c57ULL,
0x46f39cb43b126c55ULL,
0x9648168491f3b126ULL,
0xdd3e72538fd39a1cULL,
0x0348399b7d2b8428ULL,
0xcf36d95eae514f52ULL,
0x7b9231d5308d7534ULL,
0xb225e28cfc5aa663ULL,
0xa833f6d5c72448a4ULL,
0xdaa565f5815de899ULL,
0xef6a48be001729c7ULL,
0xfdc570ba2fe979fbULL,
0xb57697121dfdfe93ULL,
0xb313b667a4d999d6ULL,
0x07c7fa1bd6fd7deaULL,
0x0ee9f4c15c57e92aULL,
0xc5fb71b8f4bf5f56ULL,
0xa251f93a4b335492ULL,
0xb2f0624214f522a2ULL,
0x22d91b683f251121ULL,
0x3462898a2ae7b001ULL,
0x468bc3a10a34890cULL,
0x84ff6ce56552b185ULL,
0xed95ff232c511188ULL,
0x4869be47a8137c83ULL,
0x97f3a778e242d0cfULL,
0xd870d281b293af3dULL,
0xc3a5f903a836fafdULL,
0x4e38ddc2719162a5ULL,
0xf48286b4f22cad94ULL,
0xb75b43fb4c81784aULL,
0x562f36fae610a2e1ULL,
0x0e0e413e555bd736ULL,
0xd452549efe08402dULL,
0x0d84c9a356858060ULL,
0x19d5b3643bc029b6ULL,
0x0dd8131e97ffc842ULL,
0xf98c6d63ff48a16eULL,
0x83490ef054537f7eULL,
0xe071f833e55ebfe6ULL,
0xdae6e879b8eab74aULL,
0xe4a41f17e70d3e0aULL,
0xbc1abca3fbeeb2f3ULL,
0x5e37299d89089ba4ULL,
0xa1f735eb8235b32fULL,
0x2289d719e7b146eeULL,
0x1c9c9d0284d96719ULL,
0x317e34c009a07a39ULL,
0x5f45053666f3f84fULL,
0x63e7074f03c73d92ULL,
0x9643b3707db2cfb5ULL,
0x98e2db6c665e7178ULL,
0x36e7ac11d1f3a617ULL,
0x508f0acb609bd756ULL,
0x6f42d435193a1ac2ULL,
0x2df2cab9d65e0b00ULL,
0x4584c1fde5f1ad55ULL,
0xc80d5b04f6337337ULL,
0x5d33cf557e6c4475ULL,
0x05b5a78be74ccd40ULL,
0x3ec2cce5290785f4ULL,
0x2eef1e9c4b36828bULL,
0x7ff345b4eb7f3639ULL,
0xa15f9c2826cb34dbULL,
0x64822b68adefa772ULL,
0xc1cdaa5f9ca79b19ULL,
0x5094cafab11cbc3aULL,
0x94d40a57481346b5ULL,
0x0d493e410b68b6c6ULL,
0x71c1b0ba9e52a2deULL,
0xa7448d0059484568ULL,
0x2819237e5e8cb03aULL,
0x91e060fb399ecf2cULL,
0x5e650b9a3cb34308ULL,
0xe482d24e5b239833ULL,
0x52ed7d9f45c6b578ULL,
0x332f7ce3e077ecceULL,
0x1ead372c068ebb04ULL,
0x5b057c64bda94a33ULL,
0xe974ffd57219e5e6ULL,
0x6750ecdf35c8471bULL,
0x2c6983c911c958afULL,
0x3220a56d67450e80ULL,
0xfd8137f8b59bd084ULL,
0x167cc7f46a511504ULL,
0x36374630d0ecb4e8ULL,
0x501337e1a7f1e218ULL,
0x589b8eaea60d54a4ULL,
0x8f1a8c1b84b3ba62ULL,
0xf69ffb64131633aeULL,
0xa837ae34963616fbULL,
0x11753aea03bb0ecdULL,
0x32d9cca610dceb34ULL,
0x94c1190da321d470ULL,
0x321e26bf321fb60bULL,
0xc9202ac8ba71c873ULL,
0x284d02d7552a3e90ULL,
0xa6e86f7ba2779a5cULL,
0xd798bd6d52ad26daULL,
0x8f675048b7b012e5ULL,
0xe5e469aac68eaf1dULL,
0xc5967cdf353aeac6ULL,
0x59926f3401f437d4ULL,
0xfb49ab0635d66c3aULL,
0x316558d69efc8f6bULL,
0xfa9f65d2b4848b12ULL,
0x2b92665a263a5091ULL,
0x4171d5edd5468876ULL,
0x99bb4bf79b0a46c1ULL,
0x939ed8b0d7e91f87ULL,
0x8cb11929a65b6aeeULL,
0xbe6415659e12c64bULL,
0xbf2f4f23a6c92295ULL,
0x7890bc68793bb959ULL,
0x2a060f45a1719347ULL,
0x374635e7713ed165ULL,
0xbfb945ef1cf94d1dULL,
0xeade93e19d60d4b5ULL,
0x4b7519cb9028ac83ULL,
0x9555a4144e05ad82ULL,
0x0301a07c84aaccdbULL,
0x93dee719932225a3ULL,
0x1528080b61f54198ULL,
0x2fc96b31dccafd9fULL,
0xe9fb2e3998d16a25ULL,
0xd5340e98fde806deULL,
0xc742bc0d0c55f125ULL,
0x3a9fa27258257e53ULL,
0xc12dc512aedc530cULL,
0xc8db824276c083ceULL,
0xb3c98071a3d13b20ULL,
0xf8d5ab01c1ad6b55ULL,
0x679e0601953d1e31ULL,
0x96fc350ccdb76eabULL,
0x9fa0178362df447bULL,
0x451717a061972d1fULL,
0x0bbcbdae779cfbf3ULL,
0x7e2e9ef35a5aafbaULL,
0x68f4654bcc07435bULL,
0x30c6e14df59f8cefULL,
0xcfe629aa56717e20ULL,
0xfde48d87e844ec93ULL,
0x7c9d88364238519fULL,
0xe4ec475d296a69e5ULL,
0xf2ebc493b909d8c7ULL,
0x13834d3d0e43ab73ULL,
0x2dc12f9f04435661ULL,
0x563de834c4e56a46ULL,
0x9ec02036a6688a24ULL,
0x9847468f925dc38cULL,
0x8b0e5dca588e3f50ULL,
0x82337b3f1764851cULL,
0xd4166b32a26fc1c6ULL,
0x43e20045bcb06b0eULL,
0x3f58d1d6cd3aa0dcULL,
0xaf3d8a578b6d6232ULL,
0x762c21058ba50349ULL,
0x275d24c9aa1607f0ULL,
0x49efeab6642e9e45ULL,
0x3a321e3dadbf9e95ULL,
0x791c96a57ea29814ULL,
0x18e883239eac0617ULL,
0x0ba51d62eb24045eULL,
0x98b487f3146aa174ULL,
0xcda6a4dccb6b73c9ULL,
0x9d66a7aa1fb4595cULL,
0xe221af6f18e45563ULL,
0x6e2c7411e8736390ULL,
0xacedd32f47936b61ULL,
0x7778b73e852e4d15ULL,
0xefd873dd0e37c5adULL,
0x48ab18694d85497dULL,
0xbd7b6156c2c63188ULL,
0xb193700fe9937383ULL,
0x323beb9061b5af38ULL,
0x617864f443ee06a2ULL,
0x58faf5e64a26fbceULL,
0xa1210472d9abf2e6ULL,
0xb0880848c6f0ec2dULL,
0x0d5d48f4beaf279cULL,
0xaee3640ad56e1571ULL,
0x98598e0027505d41ULL,
0xc6a8c29b036a0730ULL,
0x083dd247f0a9dfcdULL,
0x186a5d13e79a2806ULL,
0x889e7426b755fcc9ULL,
0x684fca18cc613bcbULL,
0x60dccc0ded809744ULL,
0x246a423aef3f89bfULL,
0x980cfc250f276150ULL,
0x9583176b78273ec5ULL,
0xd857f34b29fba06dULL,
0xc22ea4dbd5d4eb3dULL,
0x39846bce19845617ULL,
0x253f6c2acb91153cULL,
0xc4b501b09381f7dfULL,
0x4c4faddbf9ff57a7ULL,
0x8afdedfde82b6a2cULL,
0xc262732b5299fcc7ULL,
0xd4ade40c841b90d6ULL,
0x206ed744bef46053ULL,
0xed519f24bba3b7a0ULL,
0x86a9224fd39784e2ULL,
0xec32155b844684ccULL,
0x5038fe125722e26bULL,
0xc80c1dcc2a85da0eULL,
0xff6afaec984bb0bdULL,
0xbe81f9c9474c967fULL,
0xc2fb0f16bcbf30ceULL,
0xb5a94fce85369b23ULL,
0x83b09f892f3e7604ULL,
0x9d5cdb2eae76bc17ULL,
0x21be002177dac1fdULL,
0xb49075e6473925a9ULL,
0xf3f148c32f156c69ULL,
0x5c3c106d732d31a4ULL,
0x5b15d80b4950f0c6ULL,
0x4dee63522a811783ULL,
0x4fd8a3e8ff9268e9ULL,
0x1b67eb44e4c05609ULL,
0x2786afb08475eb89ULL,
0xf470219ba4d19b6bULL,
0x1bea4e946fcdfe80ULL,
0x21ebf22282a74064ULL,
0x041b669aa8caba7fULL,
0x89247e3e8fdac4e5ULL,
0xafe9ec5185000ccaULL,
0x353687e6f2b91aa7ULL,
0x0c04d510680657cfULL,
0x25cfd0ff7b4e767dULL,
0xfe110bb08b44a041ULL,
0xf91423aa2c286f94ULL,
0x5cc6b88d98a3cec1ULL,
0xbb59dedb371cb2a8ULL,
0xad30d9b57c018abfULL,
0x82c93115f2862155ULL,
0x53d0184675025da2ULL,
0x5b9eee674ed934bfULL,
0xd3481a6a879631d9ULL,
0x25df42a65e516091ULL,
0x300d5fc62140a89dULL,
0x9d613cdcdc06d7ecULL,
0xdf64f2c261780baeULL,
0xdc48e5079b7f1c6cULL,
0xbf20c573c7a4df16ULL,
0xb5f64fb1ef328cf0ULL,
0x01584766a000e46aULL,
0x9b1c4f7c166c5a18ULL,
0x0856ebd04bdcc953ULL,
0xeec423c4c81e3c65ULL,
0x0fe110a084141f59ULL,
0x5967b4bca28de312ULL,
0xb2e534fb4bc88391ULL,
0x174b91a8d27f409dULL,
0xf3a2dcd21bae4919ULL,
0xa4767e14b95adf38ULL,
0xfe9f0b07bc28fd49ULL,
0x28470bfae915dec0ULL,
0x3ea221f3823327c4ULL,
0x640a0c676fb84d62ULL,
0xc2ca5337c9c10bd8ULL,
0x511eb890eb7efd2dULL,
0x782a77e63fc78d26ULL,
0xf7edd3abf0e8e8f4ULL,
0x3b14009bfec4fe60ULL,
0x54f5cebbdc8233a7ULL,
0x7f436eedfce43d10ULL,
0x40324ba22633147dULL,
0x8fd5c6f5d0bcc55eULL,
0x2bdcc1f030155a8eULL,
0x383062bfe3e25f19ULL,
0x7fb4e21fbd34a1fbULL,
0x8e2b3dbd42592403ULL,
0x3c95d093014fd9a8ULL,
0x6dd44c0c40febc8eULL,
0xc36dbbfedbf0e58eULL,
0xc0cfc583ea53a434ULL,
0xae44808c64eb123aULL,
0xfa465d1b01b5cd5fULL,
0x04b8be3720801be0ULL,
0xc0b2b846debda795ULL,
0x028966b957f2d943ULL,
0x8e9a964ff958a52dULL,
0x1ea371479081823fULL,
0x37b972dc22085d4dULL,
0x2e68b99e9ef515d7ULL,
0x2f72680378b2a5c2ULL,
0xfc2905d06898087cULL,
0xe97f7c71538c3917ULL,
0x2ab0db47d30ce099ULL,
0x773ef31c6d8dd7deULL,
0xc02c9b3249cabe35ULL,
0x6f5ee092d2b4202fULL,
0x88b5d75a341d1b63ULL,
0x8bbda8c0b3d73454ULL,
0x54d345222cc99eb0ULL,
0xfa9f84bc9bb56568ULL,
0x55d976319b868ed3ULL,
0x1d36070524abe9a8ULL,
0x000adbef66a66385ULL,
0x12a6f3abdf519328ULL,
0xa21c99d12d00f952ULL,
0x4d6ff19d2d5064a8ULL,
0x0088e1003aa37e58ULL,
0x45a814ba1e6c9dedULL,
0xa49d950f7036dbb6ULL,
0xf556015fdf981992ULL,
0xf085743caa263407ULL,
0xcaf8222921640c9fULL,
0x7fa3140a9bb6be2eULL,
0xdc97dd7f8d25782bULL,
0x16173088784c1512ULL,
0xa4679275d2886afaULL,
0x1b52227e4ae5c5f6ULL,
0x6ac8777364a88ce1ULL,
0xa7522287d967ca68ULL,
0xe221bafc730adb20ULL,
0x19a9babd3fa1372cULL,
0x483a9fa995b8246aULL,
0xc25981e52898a6d1ULL,
0x46b3c54157aabff9ULL,
0x60372062a09ed423ULL,
0xcc80a989bd16c50aULL,
0x13debad04489e16eULL,
0x2a0597379ceb6f68ULL,
0xd96a252c2832036bULL,
0x44ee5ef1085c4e46ULL,
0x8655f3d016ea7481ULL,
0x4feebc1d03bd18bcULL,
0x35516b89f62115ceULL,
0x077a7910033cd348ULL,
0xe84a7bd3942b4afeULL,
0x4291838cddff05e5ULL,
0xf3395f4106d0c9aaULL,
0x3d2638ef1e7dd291ULL,
0x03c8c0425f3cfd57ULL,
0xc3ecd3942b828c6aULL,
0x5697ec8f7061e039ULL,
0x65be8958f4cc6ad1ULL,
0xa1125e97c0949443ULL,
0x724240d826a9e69eULL,
0x2bff996618bb1707ULL,
0x2325d5954abdf8aaULL,
0x4bd95041860bd223ULL,
0x3b83eeb633e90c5eULL,
0xa18a1355045cde9dULL,
0xe49f18748ccb126cULL,
0x1660b4f6be263d3aULL,
0xd2f039d1584b1ec9ULL,
0xd1a64b151227fc11ULL,
0x5541d617c3507fadULL,
0x0d7f99664658ca3cULL,
0x6f43f28f8d861cffULL,
0xa001cf0254be48c0ULL,
0xbc4c786ce164979aULL,
0xbd825980239dbbe6ULL,
0x8206c8ba22545bf9ULL,
0x5d89d272ad35eb34ULL,
0xaf9fc9ad41abccb2ULL,
0x0465490d1c862c49ULL,
0x58853b160b2ba6baULL,
0x326a2818b83450adULL,
0x724ead2ee2d0bd23ULL,
0xcbf1b48304af80d8ULL,
0x287e840a5e8f4ee5ULL,
0xced5e028693dd7e9ULL,
0x03b185dea61025a7ULL,
0x6c197485b66de765ULL,
0x80bcbc406ae28883ULL,
0x32a438b70d14ccb6ULL,
0x79043354469a6b79ULL,
0x3875887c6f5fe087ULL,
0xda7a809e5c7a7c7bULL,
0x0c7b1c4ca0bcecf9ULL,
0xb1b035313ee4426eULL,
0x7278cde1d73f131cULL,
0xca351728d35427b2ULL,
0xfa24e4426ccd7ff8ULL,
0xf9b9182557579b09ULL,
0x597b231ff002c810ULL,
0x34ae7a2231de2d51ULL,
0x6a64af267b4e58d4ULL,
0xacd8a572ad4733afULL,
0x139bc5479df6c28bULL,
0xf63cc0a137236e93ULL,
0xb3a8222c7c673956ULL,
0x4f861e21c38af8cdULL,
0xf51fcaeabbf1964bULL,
0x26ef5b820f623976ULL,
0x0538d9e87f42b598ULL,
0xfb7f06e0fadfa1d3ULL,
0x8be647a7bc1a78b7ULL,
0xc38a9550f67b91e2ULL,
0xf8fb954dbe4e3fc3ULL,
0xd7b8dce4ec0fcd47ULL,
0xc5d924c6637d605eULL,
0xbb04c18180e60ba5ULL,
0x07c5c78a9b0933d0ULL,
0xdbd343e7475abf56ULL,
0xf5f7ca0573fb50c0ULL,
0x981d24edcd8a0d61ULL,
0xcc388efa7e34ab07ULL,
0xce2344937335b360ULL,
0xfb3bfb6afd655ae6ULL,
0x78ac670bb09872e9ULL,
0xc9421cf06de78314ULL,
0x5e00b2e645e5746dULL,
0x81b2043cd8c75cb8ULL,
0xea1efdac2c398117ULL,
0x8a11c374d470bae5ULL,
0x699bce65e00ba39aULL,
0x928d82da6ffd2c9bULL,
0xa552ef485a46fff5ULL,
0x991b8d0309cf973eULL,
0x633caa40d664d580ULL,
0x0f736be77d9f0e2bULL,
0xe40ff3861805c6ebULL,
0x1ad2f452f375533eULL,
0x8c7955f369d47df3ULL,
0xd2f157d2daded964ULL,
0x0d4265df1bf0f827ULL,
0x3ceefeb335415a3bULL,
0x3dbc35cf6953022cULL,
0x917c71a7a7a815f4ULL,
0xb2f6920b08c8791eULL,
0xd0ef38031021254cULL,
0x8742752903030e3cULL,
0xd86881e2358f3a40ULL,
0xa6e08d58a0b9f3b3ULL,
0xb8d816f6f4b3f7f1ULL,
0x6961f1512f97b655ULL,
0x12447979a7ebfbe5ULL,
0x576f2c82b74573aeULL,
0xd007abf004301803ULL,
0xae85f8f7f2111525ULL,
0x779255e2cf447cd5ULL,
0x50f0521f765cc6daULL,
0x014c62efc7c9c81eULL,
0xfabdc986e9e223caULL,
0xcd5caa60470b073bULL,
0x05c44e7c13ba0b36ULL,
0x71b8a5eb8bb7e8b2ULL,
0x4ed4adc6c03281b2ULL,
0xf2e57d6814d30b7dULL,
0x54aa7f7850f7d78bULL,
0x637b90e99fcb6504ULL,
0x301b41c51d4d23d6ULL,
0x4b465b1ce62485f9ULL,
0x374b8d0ec7a95b4cULL,
0xdcce91ff642f0573ULL,
0x718af3ecf14c0109ULL,
0x170f9c7b231dcc33ULL,
0xba1f775c5ad24ec4ULL,
0x976e6c7875876470ULL,
0x5a8768055da2109cULL,
0x79878676c87620acULL,
0xd95d79e9c4f750a8ULL,
0x6266a937b703e10dULL,
0x674fe9e4aec083ffULL,
0x4306f2ea19d726b1ULL,
0xbf7d1558b729af7aULL,
0x613e7e8da58529f1ULL,
0xc51f148602fa8b41ULL,
0x6b67c0211a66e5bfULL,
0x8e27be5863efa5a4ULL,
0xcec1d624c8c40227ULL,
0x9d9b68e83eca6027ULL,
0xc5c9d87d3464c08fULL,
0x7f20af5a5f1fdc29ULL,
0x4b24c7e80eaad3e6ULL,
0x620c984d815a4ab7ULL,
0x0b0a250716f806f8ULL,
0x8d87a93c991da4b5ULL,
0x940ee3533e1cb59eULL,
0x2f7456ce13d185f8ULL,
0x84c916a3faa4518aULL,
0x2ef80a3c53a1f414ULL,
0x181c0733db73a989ULL,
0x06f276cbc12066d2ULL,
0x6a500291899efabaULL,
0xa18c99dcfa32c6d9ULL,
0x5ab9b53663dac4acULL,
0x01f9b1d6c895d43dULL,
0x9a853aea902e12e2ULL,
0x7ab5d635419705c3ULL,
0x6c5e0d9d1692f5f3ULL,
0xa404a02315c0acdcULL,
0xbc38bb095bb9c5fdULL,
0x46af30a5e1fc976eULL,
0x5b308704ea30bedaULL,
0xb61b5316ebee0f23ULL,
0x437522342ab99935ULL,
0x986e9ae169e246e8ULL,
0x72d43930f6b53cd0ULL,
0x18f3a2b8519892f6ULL,
0x053533d98cb86036ULL,
0xe9454956050d51a5ULL,
0xaf2b3be059c9eb49ULL,
0xbc6c06ee32cc3f7fULL,
0x21a69b5c544327aaULL,
0xb628e7b725d2e3c6ULL,
0x2951d30f226e2a58ULL,
0x38cf1fbc9d7909a6ULL,
0xe22f8fa9e087904dULL,
0xd61aa563d80a5b1bULL,
0xd705def12ae7387cULL,
0xedf68e4291635dfeULL,
0x1b7736679d0d76dcULL,
0x98aa3342c138f103ULL,
0x5bc1011c7941871dULL,
0x2f346d743362b969ULL,
0x3ca2e680898ee609ULL,
0x403dccfd19a0d0f8ULL,
0x7cc3625c6054e923ULL,
0xd596218937083278ULL,
0x700d1453c5e11423ULL,
0x14d8c0549245a2f9ULL,
0xd27eef2c87eea2fcULL,
0x142952780d4600eaULL,
0x6dc39ac85c3dceaeULL,
0x9bd2b5dc2a9c1a59ULL,
0x049fe1bbd13e7000ULL,
0x2e0e307a7ce62a0cULL,
0x660148ca886f57ddULL,
0x24e671c17a61cbfcULL,
0x7f144642ab1f710eULL,
0x40558e441fef782aULL,
0x837350fd617b45efULL,
0xc73b972bbef72379ULL,
0x4ea3b06acfd97892ULL,
0x569c58183a81cdb5ULL,
0x435cb44ae41fae1eULL,
0xb3c09ea6f9dd56cdULL,
0x3417fec98f12890fULL,
0x35bea0649a08f736ULL,
0xb4aa8a798c03ddd1ULL,
0xeaedf7eda3945610ULL,
0xadc786596503fa1dULL,
0x2ef617f66dcdb05fULL,
0x212eb33c1b359a47ULL,
0x6b88787791d7de64ULL,
0x43a96d4c2ff8b818ULL,
0x64e46a6d375534b9ULL,
0x5c2588c1e64a2345ULL,
0x1bed8935ff24c9a0ULL,
0x9fbd29f3e6e3cf71ULL,
0x5059955a385765d4ULL,
0xffcf225519d9f3feULL,
0xaa7bcae9a84c9c72ULL,
0xe3bd3e177f4a6751ULL,
0xd7d8ea9faede02c5ULL,
0xbc7a263749bd3b2aULL,
0x38d85b8568707a65ULL,
0x7b49f4284c882188ULL,
0x72705e54288a3150ULL,
0xf12be24a17880cb5ULL,
0x92520efad54b8c11ULL,
0x5dc218f333f05549ULL,
0x357d6d32784e821eULL,
0x8de3bb4f82aa77bdULL,
0xcf8f4a9bd54d004fULL,
0xa3c602d7af37155cULL,
0x353099b6b95b7173ULL,
0x33729799020793d4ULL,
0x607bf12491fa999bULL,
0x796f9f8ad926f1f9ULL,
0xf347d0678506a600ULL,
0xc707a1376e9640f2ULL,
0x8e3cf4693de11d46ULL,
0xdc320664e58450d3ULL,
0x6ce17ed49e00ba31ULL,
0xd1a78ca908bcadc7ULL,
0x4dba1bdd4e8bbe47ULL,
0xc67d11535e21b215ULL,
0xaec0fa1f3f8ffb56ULL,
0x07b75b9cb9d4519dULL,
0x075e8f3d69f06256ULL,
0xf18cb61e48f9ca22ULL,
0x9402c2f5defb8048ULL,
0xe6534f4d2f18d6a7ULL,
0x1ebaa699aed2159aULL,
0x71f43397dd6ef186ULL,
0x125b2eddd1987588ULL,
0x09e87c1ed87b2bffULL,
0x8d02cdc9e3585c8cULL,
0x67b8692eb9ccb4c7ULL,
0xa6aaf0bce945ea13ULL,
0xf4fbafcb5ff22f08ULL,
0x8af2ed059e8c992eULL,
0xf940ae1e2b24c64cULL,
0x779ba8d60fa198e1ULL,
0x893732d5b54bb02bULL,
0xb1c82603e5694ffbULL,
0xebb3c99f16dba23cULL,
0x356b436d3a7ba624ULL,
0x7d8ae57d1453794eULL,
0xb539b2d575c70dd8ULL,
0x8dcf2d6e4def8acfULL,
0x11c63ffc3fd3defaULL,
0xbb2f6b1b1eafc9e3ULL,
0x1985f163746ab29bULL,
0x6ea5ce6a2351cf8fULL,
0xc50a13b6b4e024a1ULL,
0x6402723172a9130dULL,
0x3f9d08c059228b7fULL,
0x16100691647d53a7ULL,
0x045aac71e1ce044dULL,
0x65ca0990dbc1983eULL,
0x77553bf7e8d96f05ULL,
0x2bb02fd35d713c46ULL,
0xb911bf0ed215280fULL,
0x15c1e2a5620f5f36ULL,
0xc51c2f14919ce96fULL,
0xb1810c003088920bULL,
0xa636b81c40688f4fULL,
0x3ada55ba14e21446ULL,
0xe6667f881d8f1092ULL,
0xd4b07fa7d1215914ULL,
0x4658ebb13d7197f2ULL,
0xb6fe1b8ae31505c5ULL,
0xa0bc63bc30f991c0ULL,
0xab6de18a0741e447ULL,
0xfeaebec534ee8a6dULL,
0x68bc23d4ac62ce0fULL,
0xa7da553446f4e532ULL,
0x7c20dbedd894934eULL,
0xa80ea0acd7b2ab82ULL,
0x81f5cda672764701ULL,
0x536a4e47d1ee5bf5ULL,
0xc154d6ddb8d6298aULL,
0x2bf6f400f0118871ULL,
0x08c76f4a7d26e72cULL,
0x6bf79e5605a4af3dULL,
0x6e4bbd7bb208909eULL,
0x173ee7824c1608b9ULL,
0xa1544b6b14ded34fULL,
0xba8753d9e0613db2ULL,
0x6b91332a01d8186bULL,
0xed8d52c9fbff4d38ULL,
0x57b20c3e0f1b0288ULL,
0x96411854e95e7a4aULL,
0xa30949ad5336346cULL,
0xa85b32a00d77adf0ULL,
0x890c907302461006ULL,
0x20610fe7d6dbb5adULL,
0xb3fc881f197f89ccULL,
0x7fdae8088af55610ULL,
0xdbc1cffa7528794dULL,
0xf2fa09044a93cf53ULL,
0x667116e81074f9d7ULL,
0xad1046792b4d9759ULL,
0xa7cafcc3ee2b398dULL,
0x1e6943e7ae3fddd0ULL,
0xf4e21ca97d41a661ULL,
0x1935dcfe64916c98ULL,
0x3f4c5af99082c210ULL,
0xbb744ac4cdc12d37ULL,
0x24eba0152fe2f36bULL,
0xf66718cf3c9e6ff4ULL,
0x24ba5c4b0a8fd186ULL,
0x902a814ebc78cbb0ULL,
0xc895706d0ad79bf2ULL,
0xfb54e6afd7677377ULL,
0x3395462cb323dafcULL,
0x1765f64979059089ULL,
0x4f2503711b114ce4ULL,
0x1b2850a9a86db30fULL,
0xedc765f3eead6640ULL,
0x0ed33d0703e54b81ULL,
0x59e6911707d9a1e3ULL,
0xe15b68a6fa2dddb3ULL,
0x7d6cb238f25b4ec3ULL,
0x83bd75004f015be4ULL,
0x29d098736ebe7ea9ULL,
0xf7df7c3827638900ULL,
0x2c8392e222782637ULL,
0xaf8507f658939e9bULL,
0x1daeea4ff6332658ULL,
0x2d732dc96d7adb72ULL,
0xd523564746edb11bULL,
0xb44d4164ff8cda55ULL,
0xe9c76e93e2f60bdfULL,
0x004296289d0163bfULL,
0xbcb1c00839246844ULL,
0xba5300e273fc5c86ULL,
0x9f91c9fa91d72febULL,
0xe5bee2fb6e6fdeaaULL,
0x5ce33bb2d7474df8ULL,
0x9999761a31aef55aULL,
0xd09af91e66c718beULL,
0xeabe4ab34b9cd70dULL,
0xeb733d53f5b1d5b8ULL,
0x26ee2cceb9691e80ULL,
0xb81bec7e2de8f781ULL,
0x7e7925c145a6f484ULL,
0x41f2fda8abcf13a5ULL,
0x8217cdc62f8b0dccULL,
0x6ed89e51ddfc7343ULL,
0x9d4ffdd5dcf3b9d3ULL,
0x5b186539f5d4943bULL,
0xe76f6ffd5620ce53ULL,
0xc7b22abde412c37cULL,
0xa96ec0c950b59508ULL,
0x137cbf65b24f4027ULL,
0xfb977aed83e0efefULL,
0x29cc9eefdb0f1943ULL,
0x46d418cb4ff6da58ULL,
0xa654b9d497dd8aacULL,
0x7b522b71b23ccf2bULL,
0xd71887ed8381de65ULL,
0x54df226dfd47d14aULL,
0x60531b3859a2a8ccULL,
0xa6a6103b2372fc42ULL,
0x3c0f2c19ceccd159ULL,
0xf16d45a53db7f3adULL,
0xf32c645f12397f84ULL,
0x95627043b646e8e3ULL,
0xdbea0fd2793c84b7ULL,
0x379a3b0b0b4e64e8ULL,
0x75fb3ad7a270d3b2ULL,
0xcecfc440122f2e06ULL,
0x71ed9a08e7ada6a1ULL,
0x519680ead8014944ULL,
0xc78e330a77c6d50dULL,
0x32d4abc39e1bfff3ULL,
0xd1672a2f4fc4fbe0ULL,
0x7ca7f9d91a0461d3ULL,
0xdb9f979f25e5fbc4ULL,
0x39be4cf8eb863eefULL,
0x6865fb9352d21828ULL,
0x6061368e4d3958f8ULL,
0x7cfc6a7adcbec574ULL,
0xe580eab1009b64edULL,
0x90362dcc34f6659fULL,
0x83687ef60931b711ULL,
0x27e46692eb95ff7bULL,
0xe6840eae1418215aULL,
0x4b627eae25b4f08eULL,
0x9cd44859e2bd104bULL,
0x9b173a39761b1dbcULL,
0x4a329a5510e3c086ULL,
0xf13ccb53cc3907e8ULL,
0xff95257fabca3edcULL,
0xda4b7f1cf1ed9805ULL,
0x075608adc345bed3ULL,
0x3a331c82d2924378ULL,
0x7686df1e66fa9655ULL,
0xb1c4ccc5565019f4ULL,
0x39b1fc9947ff6d37ULL,
0xba82db523c13640dULL,
0x91645d38c420b220ULL,
0xcb1a0a6c79fe9feaULL,
0x667fe176012925f0ULL,
0xf2b8446b585294f5ULL,
0x0691117ae0abb50eULL,
0x5eb6118ca2e62872ULL,
0xc924fbaf71c315dfULL,
0xf842177b71c6f22aULL,
0xc80754b46448ee6aULL,
0x21d3ff566b098e01ULL,
0xb149b5d9a0eee677ULL,
0x9b73429d2da4c233ULL,
0x9f885ddc498851abULL,
0xb22eda7ca1b9784cULL,
0xce09c914771d0ed9ULL,
0xe7139893ede5e68fULL,
0x8a1075b14e9fa79eULL,
0x47f16a5941c7e3c5ULL,
0x900a683d7bf56ee7ULL,
0xbff7f284ac239f94ULL,
0xaa6058650a798c9cULL,
0x66d60ffba7c059acULL,
0xa858d85aa9a0083fULL,
0xc28826779a21e0dfULL,
0x5f35efa1b5fe99d5ULL,
0x2fc8244af685d9b4ULL,
0x09a0108475a964d7ULL,
0x31024f713b9f20bbULL,
0xd970efd90cc18400ULL,
0xd61969558d72253fULL,
0xa78ee57a609e07a5ULL,
0xf2f7827f64199028ULL,
0x221335a2ccad0a47ULL,
0x52c7eeaf8e3e6e1aULL,
0xd661e5ab6b0e254bULL,
0x3e05b4c701bc2852ULL,
0xd31acb22f296d220ULL,
0x342d8b1f90505e5cULL,
0xfc2348b58fd655a2ULL,
0x5a57c7ce5f310a34ULL,
0xa843c5acaaa2dd7dULL,
0xf7b1f0c5dc5c5a10ULL,
0xf4a1e7100c6c8bbfULL,
0x10faf8e33c1b0090ULL,
0x2881d5f64e455310ULL,
0x261dcd7c8bfedd46ULL,
0xfd423849dcdb645aULL,
0x13402769dc9da361ULL,
0x35832a72d7867b05ULL,
0xc3d4c4727b4c30a1ULL,
0x5b5179801ab877ffULL,
0xfd7d1c8f8702501aULL,
0x94605dfe134fe4beULL,
0x5ed44f84153de6c3ULL,
0x75558925a53502baULL,
0xd0abd43d349ae531ULL,
0x7e5c7ca2048f9fefULL,
0xe7cddce1d99ab42bULL,
0x92ad1cafdbd3787fULL,
0x05827d13bde355d6ULL,
0x01c0593caf195d0fULL,
0xe641a40c5afcee19ULL,
0x4f9b7fd1a856b701ULL,
0xdce3eea6efb1853bULL,
0xe28244e9c4e63acaULL,
0x3ef4b139cb56597dULL,
0x7fac5a181c687422ULL,
0x23ea86e377a1a003ULL,
0x14e089a655b2ce4eULL,
0xe215e3bd72cc0a97ULL,
0xf45af26303d5c581ULL,
0x7777f058896f9a73ULL,
0x99aec0374d142a5fULL,
0x552c8546d98e8584ULL,
0x89728b9d11317b9aULL,
0x7464d56911346f28ULL,
0xb19fc6c46914f6f0ULL,
0x15f4e2350578d40dULL,
0x1ddfb4b328b248efULL,
0x8418c3028fd170f6ULL,
0x25046319c34ed2a3ULL,
0x3e018dac9d47fa1eULL,
0x4f1f19bb2fbc34d5ULL,
0x0fba70b5df282972ULL,
0x02df13f0e30ec8b6ULL,
0xdd92d00049da4df1ULL,
0x49026d77fb069f9dULL,
0xdbaae0696329da50ULL,
0x361ba249c6ef3834ULL,
0x3f8d4469ca3868e3ULL,
0xc3ea9e0ea2008a95ULL,
0xee989a98e0c27f84ULL,
0xcbda49dbf8e7f17dULL,
0x42ed85724d734af3ULL,
0x0216234c8107208cULL,
0x97dc33f37554264bULL,
0x63a275b249f2a36dULL,
0x71db0720516bf741ULL,
0x08e4ecb1fef9519dULL,
0x6029a9fc387d3ebeULL,
0x0a55be6aaac4f34dULL,
0xec75d1821df80754ULL,
0x077e00d60ad2f6ceULL,
0x742baeece9f34ad5ULL,
0x7a8e9282125cd050ULL,
0x688330ce6f0a95c5ULL,
0xf86a39a8ce48c8c4ULL,
0xf04459ab9abb2122ULL,
0xb848403544a7d883ULL,
0x40870758da58c40bULL,
0x5a4a69d56457824aULL,
0x6350619c1b5fbd00ULL,
0xbe46a30362255ca9ULL,
0x3563642107194153ULL,
0xd4549f6d5548f391ULL,
0x49a74dd8304b99dcULL,
0x8f0ce2b2e9235071ULL,
0x0e2ccf5ded9a8b7bULL,
0xcd987e088c2e0809ULL,
0x85ef9bc7ed0152d6ULL,
0xbe35677eff8341bfULL,
0x28b88cd720f7dd5aULL,
0x17c5479731a406acULL,
0x371ed4c130db5662ULL,
0x3bd87aa02d5ac70aULL,
0xfc01994f7de10985ULL,
0x442c4ac382a5aeb6ULL,
0xa34fa4b48d0c5f2fULL,
0x510400b5b016d4ccULL,
0x3b689912720d376dULL,
0x9ec6ea60cf14e2c4ULL,
0xd044145163329affULL,
0x0117185d6b9486acULL,
0x5573ea7a7aa8498aULL,
0x952bd0abd1044727ULL,
0x0f17a52dd8c101cbULL,
0x78b50fccf5c59e79ULL,
0xabacefe6dfe40ea9ULL,
0xca57246ba322697aULL,
0x5fd7df6eb1988ac8ULL,
0x3789eefa5041b684ULL,
0x5ede25e031ab43dcULL,
0x95819a9854f69430ULL,
0x33e3ed56011a727eULL,
0xef113c7fc6ae83a7ULL,
0x33fddf7b3a32eb42ULL,
0xa30cde8d9d71ddebULL,
0xfe60cc7fe3f32cf2ULL,
0x817692be4c6d02c0ULL,
0xfe5609a2f815b73eULL,
0x6d22f1de40a7ee20ULL,
0x77ce3eca9ab12b57ULL,
0x89cd08b7a9b89852ULL,
0x4c2a4a065c147fecULL,
0xce1b2ec486f59d8fULL,
0x0eceda66be6bc4aaULL,
0x7c7732a3c728fc77ULL,
0x1f6b965b48ce8947ULL,
0x11ecc7bc40cf72dfULL,
0x0cdbb71074783cdcULL,
0xa0312aada92ce3caULL,
0x6b71e2b1b20073c1ULL,
0x4660e9846cdb6d96ULL,
0xe5f2b31a4a1a3362ULL,
0x20a0b2f0cf3f4f4aULL,
0xef6aa63353c396edULL,
0xa5a596009f79a04dULL,
0x58f772dcd6d17555ULL,
0x7957ccbb31af0b61ULL,
0xb78429d6762f68b7ULL,
0x5d56c1985fe7a77aULL,
0xa7c39cbaeedbcf38ULL,
0x65995fc6feda19dbULL,
0x86bd2842e58c1abfULL,
0x6b8f580e7f95a512ULL,
0x04702eee85556f24ULL,
0x7d03323b15770702ULL,
0x7142db6082e23f0eULL,
0xa7187369f53d799bULL,
0x33ac09c9ef8b5011ULL,
0xa7215e563a441b86ULL,
0x719d08af2d6bbe27ULL,
0x411169b3cc4d2938ULL,
0xac27a7a1de0b5506ULL,
0x6a22863807d7a858ULL,
0x39ee2d2990d69bd2ULL,
0xa4532bde73a403f0ULL,
0x93140026ce0f907fULL,
0x3ee28286b7fb6bd9ULL,
0x9a764f034f6612c3ULL,
0x64a2aebf4bcc603eULL,
0xe3a52379d46f760dULL,
0x177bffaf24689dabULL,
0x50cae3da45597fe0ULL,
0x20965d5b98702278ULL,
0x2216f521a928cc88ULL,
0x66abbd80b4225632ULL,
0x4deb85d7906c2b68ULL,
0x2afe23ad7e7d64eeULL,
0x086c679450374d70ULL,
0xda4dcd508b82c799ULL,
0x10d7894a856495d7ULL,
0x0da56c0076c24fbaULL,
0x0e326b797a477812ULL,
0xef6bd63cc63df6c4ULL,
0x79bc5723426d1f76ULL,
0xb75d3b456282beb3ULL,
0xae6e33cfa8828989ULL,
0x6ab76312f343be84ULL,
0xdc8f5b9ac09ecab9ULL,
0x431d138d0462179eULL,
0x52ef096bb35e1c0dULL,
0xf66a0311c0456476ULL,
0x096d359977f58b8eULL,
0xfe552ed33c46d0fbULL,
0x30de400c07364d98ULL,
0x6db002e62192aad4ULL,
0xb7b1f521b2cffd09ULL,
0x1ff582472dd69760ULL,
0x269542702e92e3a8ULL,
0x74cc87913e8fc54dULL,
0xfb2690d45bcc2646ULL,
0xc0d6a127b1e95606ULL,
0xa5fb89708bb60bddULL,
0x32c3cbfd9af652f4ULL,
0xe693fa7b4c6820d5ULL,
0x14183f649e3488f4ULL,
0x2a493ed4e84d01e9ULL,
0x5033458942015a8bULL,
0x08e7eafa81e22990ULL,
0xe61a4c18db1aa3d6ULL,
0xe884ae998f479eb4ULL
};
unsigned long long zobvalh23(unsigned i)
{
return ham23bit[i % 999];
}
#ifdef UNIT_TEST
#include <stdio.h>
int main(void)
{
unsigned i;
unsigned j;
int bits;
unsigned long long mask = -1;
for (bits = 0; bits< 64; bits++)
{
// Trim off top bits.
mask <<= bits;
mask >>= bits;
for (i = 0; i < 999; i++)
{
ham23bit[i] &= mask;
}
for (i = 0; i < 999; i++)
{
for (j = 0; j < 999; j++)
{
if (i != j)
{
if (ham23bit[i] == ham23bit[j])
{
printf("bits=%d\n", bits);
printf("zobvalh23(%u)=%llu\n", i, zobvalh23(i));
printf("zobvalh23(%u)=%llu\n", j, zobvalh23(j));
exit(EXIT_FAILURE);
}
}
}
}
}
return 0;
}
#endif