浮點數是如何計算hash的?

時間 2021-06-03 01:18:44

1樓:

hash的本質是對二進位制串進行操作,只要有一位不同hash結果就差千萬里。

那麼,你的問題就是先把相近的值用相同的二進位制串表達,然後去計算hash。

具體怎麼定義相近,就由你自己實現。最簡單的辦法就是用吧。

這裡的公式編輯器不支援分數麼?

2樓:

如何保證被看做相等的兩個數值非常接近的浮點數hash到相同的值?

=> 先定義什麼是數值非常接近?有多接近?

思路是1)根據「數值非常接近」的定義,將浮點數對映成byte序列,這裡會有浮點數的精度損失。

2)然後用通用的方法將1)中byte序列進行hash。

計算機中表示的浮點數在數軸上不是均勻的,「數值非常接近」的定義本質上是將數軸劃分成乙個乙個的格仔,屬於同乙個格仔的全部浮點數都可以對映為格仔的序號,進而進行hash。

3樓:

如何保證被看做相等的兩個數值非常接近的浮點數hash到相同的值?

這個取決於你判定相等的條件。

如果採用一般形式的fabs(a - b) < EPSILON來判等的話,可以考慮將數值乘以1.0 / EPSILON取整。

如果採用fabs(a / b - 1) < EPSILON(其中b != 0)來判等的話,可以直接用IEEE中關於浮點數的格式說明來設計演算法。一般來說,指數字要全部計算,尾數字按精度取,符號位特殊處理(要考慮+-0的情況)。

但是需要注意的是,無論你用什麼方法,都不能保證當判定條件成立時,兩個數一定有相同的hash值。hash的相等關係不滿足傳遞性,對於不同的數,必然會由於截斷而不一致的的判定半徑。

這點對於整數也是一樣的。

浮點數如何轉換為定點數?

Aman 按 IEEE754 標準,float 的格式是 binary32,double 的格式是 binary64,浮點數中的有效數字 significant 部分其實可以理解為是乙個定點數,只不過有指數 exponent 部分做了小數點偏移 類似科學計數法,只不過是二進位制的,浮點數因此得名 我...

浮點數不能表示的最小正整數是?

春日的憂鬱 首先浮點數呈離散分布,且其步長為2 e 2 n 此公式證明可參照此問題下另一位答主的數學推導 取實際階碼值 階碼用移碼表出 e n,步長為1,此時最大可表達的值為11 11B 由於隱藏位,共n 1個1 算出2 n 1 1,此時從2 n到2 n 1 1之間的正整數都能精確表達。實際上通過改...

如何用 C 語言生成 2,2 之間的隨機浮點數?

把區間 a,b 上的點r線性對映到區間 x,y 用公式 b r y x b a x即可。c語言裡面a 0,b RAND MAX,有的語言a 0,b 1。 Milo Yip 通常是這樣寫 include srand rand RAND MAX include printf include time i...