通常のフロート、無限大、NaN、および空マークを float[] に含める方法があります。Float にはバイナリ表現があり (IEEE-754 を参照)、Float.floatToIntBits(float) で確認できます。NaN の「標準的な」(Float API を参照) バイナリ表現は 0x7fc00000 です。興味深いのは、NaN には多くのバイナリ表現があり、それらはすべて有効です。たとえば、0x7ff00000 も NaN です。これを試して
int nan1 = 0x7ff00000;
int nan2 = 0x7fc00000;
float f1 = Float.intBitsToFloat(nan1);
float f2 = Float.intBitsToFloat(nan2);
System.out.println(Float.isNaN(f1));
System.out.println(Float.isNaN(f2));
f1 と f2 の両方が NaN であることがわかります。
したがって、0x7ff00000 などの任意の非正規 NaN を空のマークとして使用できます。float を配列に書き込むときは、NaN が正規の形式に変換されることを確認してください。例えば
f = (f != f) ? f = Float.NaN : f;
f != f は、float が NaN かどうかをテストする最速の方法であることに注意してください。
float が空のマークかどうかを確認するには
isEmptyMark = f != f && Float.floatToRawIntBits(f) == 0x7ff00000;