2016-11-04 1 views
3

Es ist bekannt, dass sowohl float als auch int 4 Bytes für die Speicherung in primitiven Arrays in Java benötigen. Daher kann ein Gleitkommawert auf einen int-Wert abgebildet werden, der die gleiche interne 32-Bit-Darstellung aufweist.Wie bidirektionale Eins-zu-Eins-Zuordnung zwischen Float- und Int-Werten in Java herstellen?

Wie eine rechnerisch kostengünstige Eins-zu-Eins-Zuordnung zwischen Float und Int zu erstellen? Zum Beispiel kann das Mapping 3.2345f bis -67567575 zuordnen und -67567575 zurück auf einen Wert nahe 3.2345f übertragen, und die meisten Float-Werte (können NaN oder Infinity ignorieren) können abgedeckt werden. Die Reihenfolge oder Bedeutung der Zuordnung spielt keine Rolle.

(Der Grund, warum ich dies brauche ist ein Problem in Bezug auf eine Jcuda-Kernel-Funktion zu lösen, die ich benutze andere Methoden sind problematischer für mein Problem. Brauchen Sie eine Antwort direkt auf diese Frage anstelle von denen andere Methoden und so weiter empfehlen usw.)

Antwort

5

Sie können Float.floatToIntBits(floatValue) für float-> int-Konvertierung und Float.intBitsToFloat(intValue) für int-> float-Konvertierung verwenden. Da die Javadoc- für intBitsToFloat Zustände:

public static float intBitsToFloat (int bits)

Gibt den Gleitkommawert zu einer gegebenen Bit-Darstellung entspricht.

Und die andere:

public static int floatToIntBits (float-Wert)

Gibt eine Darstellung des angegebenen Gleitkommawert gemäß dem IEEE 754 Gleitkommazahlen "single-Format" Bit-Layout.

Verwandte Themen