gpt4 book ai didi

c++ - MurmurHash 函数不具有确定性

转载 作者:行者123 更新时间:2023-11-28 07:41:30 24 4
gpt4 key购买 nike

我正在使用 C/C++ 中的 murmurhash 函数,就像这里建议的那样:https://sites.google.com/site/murmurhash/ (MurmurHash2.cpp)。我在不同的键上多次调用此方法。但是,该行为不是确定性的。有时对于相同的键,我会得到不同的结果(相同的键,相同的长度,相同的种子,不同的返回值)。我调试了一下,好像和下面这行不一样:

line 33: unsigned int k = *(unsigned int *)data;

在该行之后,该方法的相同输入有不同的 k 值,这也会导致最终返回的 h 不同。

我是不是误会了什么?导致这种行为的问题可能是什么?提前致谢!

关于调用的更多细节:

调用来自 Lua 代码,Lua 代码调用具有以下签名的 C 函数:

int preparehash(lua_State *L)

此函数然后从 Lua 堆栈中读取参数并调用以下使用 MurmurHash2 的函数:

unsigned int hashing(const char *a, unsigned int seed) {
int len = (int)sizeof(a);
unsigned int b = MurmurHash2(a,len,seed);
return b;
}

最佳答案

你没有告诉我们 data 的类型,但是那一行

unsigned int k = *(unsigned int *)data;

从根本上看是错误的,可以解释为什么您会看到不同的值。如果 data 的宽度与 unsigned int 不同或对齐方式不同,k 的某些字节可能会收到一些恰好位于高位的垃圾*data 中的单词。

关于c++ - MurmurHash 函数不具有确定性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15763213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com