Quelqu'un peut-il s'il vous plaît confirmer et expliquer pourquoi cela se produit:NSNumbers ayant une valeur de 0,5 et 1,0 ont le même hachage
sur simulateur (7.1, 32 bits):
NSNumber *a = [NSNumber numberWithFloat:0.5]; // hash = 506952114
NSNumber *b = [NSNumber numberWithFloat:1.0]; // hash = 2654435761
NSNumber *c = [NSNumber numberWithFloat:2.0]; // hash = 1013904226
Sur l'appareil (7.1 , 32 bits):
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
Je pensais que ce serait peut-être un problème 32 bits, mais lorsque je tente la même chose sur simulateur 64 bits et le dispositif, je reçois le même numéro. Simulateur est bon, l'appareil a des hachages identiques. J'essayais d'ajouter des objets uniques à un NSMutableOrderedSet
et j'ai remarqué que mes deux objets qui étaient identiques sauf pour des valeurs différentes de 0.5 et 1.0 n'étaient pas tous les deux ajoutés, et c'est pourquoi. J'ai essayé les deux flotteurs et les doubles avec le même résultat.
Mais pourquoi?
Comprenez-vous le concept de 'hash'? – Sulthan
Eh bien, au meilleur de ma connaissance, c'est un entier non signé qui (je suppose) fournit une référence unique à un objet avec une valeur spécifique ...Mais s'il me manque quelque chose, faites le moi savoir. – jowie
Oui, il vous manque quelque chose, "hash" ne garantit pas l'unicité. C'est comme un code postal. Beaucoup de gens vont partager le même code postal, mais les codes postaux sont toujours d'une grande aide lorsque vous cherchez quelqu'un. 'hash' n'a pas de sens sans si vous n'avez pas un bon' isEqual' aussi. – Sulthan