Hashwert kürzen respektive verkleinern

Hallo ihr,

ich möchte einen 64-bit-Hash auf eine Zahl von 0 bis einschl. 999 kürzen. Wie gehe ich vor?

lg!

Spricht irgendwas gegen hash % 1000?

Das Vorzeichen. :frowning: Aber mit 1 bis 2 Stellen mehr, würd es auch genügen.

Oh, das abs sollte man natürlich nicht vergessen: Math.abs(hash % 1000);

So geht’s:

 final int index = file.hashCode() % 1000;
 final String form = String.format("0%04d", index);

Aber ist das dann noch ‚genau‘?!?!

das ergibt für index=-999: „0-999“ und für index=999: „00999“ und keine "Zahl von 0 bis einschl. 999 "?

Was verstehst du unter „genau“?

2^64 mögliche Werte auf 1000 mögliche Werte abzubilden verliert logischerweise eine Menge der Information…

Was willst du denn damit machen?

Ja, aber durch abs geht nochmal die Hälfte der Information flöten…

Wenn dir abs nicht gefällt, warum versuchst du dann nicht

int hash = (obj.hashCode() & 0x7FFFFFFF) % 1000;

abs schneidet ja nur ein evtl. vorhandenes negatives Vorzeichen weg.

Was wäre denn jetzt ‘richtig’?

Das ist in „2^64 mögliche Werte auf 1000 Werte“ schon drin, ohne abs wäre es abgebildet auf 1999 mögliche Werte…

Ich frage mich gerade, was das mit der Frage zu tun hat… Oder warum du das wissen müssen solltest?

Aber nagut, es geht um Version 2 des MFClose , genauer, Bezeichnerwahl.

Weil es u.U. Alternativen zu “Hashcode auf 0-999” abbilden gibt.

Grad bei “Bezeichnerwahl” - muss das auf eine Zahl von 0-999 beschränkt sein?