NaN
日本語 | 非数 |
英語 | Not a Number |
ふりがな | えぬえーえぬ、のっとあなんばー |
フリガナ | エヌエーエヌ、ノットアナンバー |
数ではない数。
double型及びfloat型の特殊な数値。
Mathクラス等による計算の結果、正しい計算結果が得られない場合に返される。
16進数表記では、double型は0x7FF8000000000000、float型は0x7FC00000がNaNである。これらの値は、Doubleクラス及びFloatクラスのNaNフィールドとして宣言されている。また、これらのクラスのisNaN()メソッドを使用することでNaNであるか判別することができる。
double型及びfloat型の特殊な数値。
Mathクラス等による計算の結果、正しい計算結果が得られない場合に返される。
16進数表記では、double型は0x7FF8000000000000、float型は0x7FC00000がNaNである。これらの値は、Doubleクラス及びFloatクラスのNaNフィールドとして宣言されている。また、これらのクラスのisNaN()メソッドを使用することでNaNであるか判別することができる。
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// 「NaN」は、Doubleクラスにstatic finalフィールド
// として宣言されています。
double dNaN = Double.NaN;
// System.out.println()メソッドはこれを「NaN」と
// 出力します。
System.out.println( dNaN );
// NaN
// Floatクラスも同様です。
float fNaN = Float.NaN;
System.out.println( fNaN );
// NaN
// NaNかどうかはDoubleクラスとFloatクラスの
// isNaN()メソッドを使用します。
System.out.println( Double.isNaN( dNaN ) );
// true
// double型の場合、NaNは16進数表記で
// 0x7FF8000000000000となります。
String hexNaNString = Long.toHexString( Double.doubleToLongBits( Double.NaN ) );
System.out.println( hexNaNString );
// 7ff8000000000000
// 2進数表記だと以下のようになります。
outputDoubleBit( Double.NaN );
// 0 11111111111 1000000000000000000000000000000000000000000000000000
// NaNはたとえばMathクラスのlog()メソッドに-1を
// 渡すことで返されます。
double d = Math.log( -1 );
System.out.println( d );
// NaN
System.out.println( Double.isNaN( d ) );
// true
}
/**
* double型変数をビット形式で出力します。
*/
private static void outputDoubleBit( double d )
{
// double型変数をビット形式で文字列化します。
String source = Long.toBinaryString( Double.doubleToLongBits( d ) );
// 左0埋めします。
StringBuffer strbuf = new StringBuffer();
for( int iF1 = source.length(); iF1 < 64; ++iF1 )
{
strbuf.append( "0" );
}
strbuf.append( source );
// 符号、仮数部、指数部の間にスペースを入れます。
strbuf.insert( 12, " " );
strbuf.insert( 1, " " );
System.out.println( strbuf.toString() );
}
}
public class Sample
{
public static void main( String[] args )
{
// 「NaN」は、Doubleクラスにstatic finalフィールド
// として宣言されています。
double dNaN = Double.NaN;
// System.out.println()メソッドはこれを「NaN」と
// 出力します。
System.out.println( dNaN );
// NaN
// Floatクラスも同様です。
float fNaN = Float.NaN;
System.out.println( fNaN );
// NaN
// NaNかどうかはDoubleクラスとFloatクラスの
// isNaN()メソッドを使用します。
System.out.println( Double.isNaN( dNaN ) );
// true
// double型の場合、NaNは16進数表記で
// 0x7FF8000000000000となります。
String hexNaNString = Long.toHexString( Double.doubleToLongBits( Double.NaN ) );
System.out.println( hexNaNString );
// 7ff8000000000000
// 2進数表記だと以下のようになります。
outputDoubleBit( Double.NaN );
// 0 11111111111 1000000000000000000000000000000000000000000000000000
// NaNはたとえばMathクラスのlog()メソッドに-1を
// 渡すことで返されます。
double d = Math.log( -1 );
System.out.println( d );
// NaN
System.out.println( Double.isNaN( d ) );
// true
}
/**
* double型変数をビット形式で出力します。
*/
private static void outputDoubleBit( double d )
{
// double型変数をビット形式で文字列化します。
String source = Long.toBinaryString( Double.doubleToLongBits( d ) );
// 左0埋めします。
StringBuffer strbuf = new StringBuffer();
for( int iF1 = source.length(); iF1 < 64; ++iF1 )
{
strbuf.append( "0" );
}
strbuf.append( source );
// 符号、仮数部、指数部の間にスペースを入れます。
strbuf.insert( 12, " " );
strbuf.insert( 1, " " );
System.out.println( strbuf.toString() );
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // 「NaN」は、Doubleクラスにstatic finalフィールド // として宣言されています。 double dNaN = Double.NaN; // System.out.println()メソッドはこれを「NaN」と // 出力します。 System.out.println( dNaN ); // NaN // Floatクラスも同様です。 float fNaN = Float.NaN; System.out.println( fNaN ); // NaN // NaNかどうかはDoubleクラスとFloatクラスの // isNaN()メソッドを使用します。 System.out.println( Double.isNaN( dNaN ) ); // true // double型の場合、NaNは16進数表記で // 0x7FF8000000000000となります。 String hexNaNString = Long.toHexString( Double.doubleToLongBits( Double.NaN ) ); System.out.println( hexNaNString ); // 7ff8000000000000 // 2進数表記だと以下のようになります。 outputDoubleBit( Double.NaN ); // 0 11111111111 1000000000000000000000000000000000000000000000000000 // NaNはたとえばMathクラスのlog()メソッドに-1を // 渡すことで返されます。 double d = Math.log( -1 ); System.out.println( d ); // NaN System.out.println( Double.isNaN( d ) ); // true } /** * double型変数をビット形式で出力します。 */ private static void outputDoubleBit( double d ) { // double型変数をビット形式で文字列化します。 String source = Long.toBinaryString( Double.doubleToLongBits( d ) ); // 左0埋めします。 StringBuffer strbuf = new StringBuffer(); for( int iF1 = source.length(); iF1 < 64; ++iF1 ) { strbuf.append( "0" ); } strbuf.append( source ); // 符号、仮数部、指数部の間にスペースを入れます。 strbuf.insert( 12, " " ); strbuf.insert( 1, " " ); System.out.println( strbuf.toString() ); } }