对于相干噪声的实现(类似于Perlin noise),我正在寻找适合图形的hash function。
我不需要以任何方式加密,而且,我甚至不需要它成为超级棒的哈希。
我只想组合两个16位数字并输出一个8位哈希值。随机尽可能随意,但AVR处理器(Arduino使用的8位)也很快。
目前我正在使用实施here:
const uint32_t hash(uint32_t a)
{
a -= (a<<6);
a ^= (a>>17);
a -= (a<<9);
a ^= (a<<4);
a -= (a<<3);
a ^= (a<<10);
a ^= (a>>15);
return a;
}
但是考虑到我除了8位以外的所有内容,并且我不需要任何壮观的东西,我可以使用较少的指令逃脱吗?
...我的lib8tion图书馆通过FastLED打包,启发了我的搜索。它具有特定的功能,例如,多个两个uint8_t
数字,以尽可能少的时钟周期给出uint16_t
个数字。
答案 0 :(得分:2)
unsigned char hash(unsigned short a, unsigned short b) {
static const unsigned char t[256] = {...};
return t[t[t[t[a & 0xFF] ^ (b & 0xFF)] ^ (a >> 8)] ^ (b >> 8)];
}