是否有人可以確認,並解釋,爲什麼發生這種情況:NSNumbers與值0.5和1.0具有相同的哈希
在模擬器(7.1,32位):
NSNumber *a = [NSNumber numberWithFloat:0.5]; // hash = 506952114
NSNumber *b = [NSNumber numberWithFloat:1.0]; // hash = 2654435761
NSNumber *c = [NSNumber numberWithFloat:2.0]; // hash = 1013904226
在設備上(7.1 32位):
NSNumber *a = [NSNumber numberWithFloat:0.5]; // hash = 2654435761
NSNumber *b = [NSNumber numberWithFloat:1.0]; // hash = 2654435761 - SAME!
NSNumber *c = [NSNumber numberWithFloat:2.0]; // hash = 5308871522
我想這可能是一個32位的問題,但是當我嘗試在64位模擬器和設備同樣的事情,我得到了同樣的問題。模擬器很好,設備具有相同的哈希。
我試圖給NSMutableOrderedSet
添加獨特的對象,並注意到我的兩個對象除了0.5和1.0的不同值之外都是相同的,這兩個對象都沒有被添加,這就是原因。我嘗試了兩次漂浮和同樣的結果。
但是爲什麼?
你明白'hash'的概念嗎? – Sulthan
據我所知,這是一個無符號整數(我認爲)提供了一個具有特定值的對象的唯一引用...但如果我錯過了一些東西,請告訴我。 – jowie
是的,你錯過了一些東西,'散列'並不能保證唯一性。這就像一個郵政編碼。很多人會分享相同的郵政編碼,但是當您搜索某人時,郵政編碼仍然是一個很大的幫助。如果你沒有一個好的'isEqual','hash'也沒有意義。 – Sulthan