ผมเรื่องเขียนรหัสโปรแกรมที่จะค้นหาสำหรับคอลลิชัน std::hash<std::string>
และพยายามที่จะย้อนกลับบางอย่างค่อยจัดการเรื่องขั้นตอนการคำนวณ.
นี่เป็นการคูณอยู่ std::hash
implementation.
size_t hash2 = shift_mix(hash1) * mul;
ฉันรู้ว่า hash2
-จากคนก่อนขั้นเหมือนกันฉันรู้ mul
-มันเป็นอย่างต่อเนื่องค่า= 0xc6a4a7935bd1e995UL
.
shift_mix(hash1) * mul
ทำให้เอ่อล้นออกมา(hash2 / mul = 0
)ดังนั้นมันต้องใช้เพียงสุดท้าย 64 บิตของคูณค่าผลลัพธ์.
ดังนั้นฉันต้องหาทางเพื่อหาหลายของ variants shift_mix(hash1)
ซึ่งพอใจความเท่าเทียม. อะไรคือหนทางที่ดีที่สุดที่จะทำมัน? บางทีอาจจะใช้ __int128_t
?