【发布时间】:2014-12-29 14:35:38
【问题描述】:
本例中的幻数是0x9e3779b9,以10为底是2654435769。代码有什么原因吗
seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
使用十六进制表示而不是 base-10 表示?如果将代码中的 0x9e3779b9 替换为 2654435769,功能会保持不变吗?
【问题讨论】:
-
顺便说一句,常数的值使用黄金比例:2654435769 = 2^32*(2/(1 + sqrt(5)))