2016.02.15
非数値(NaN)とは
はじめに
計算の結果が数値として表せないときに、その値をNaNと表現します。
具体的には、平方根を計算するMath.sqrtメソッドにマイナスの値を渡すとNaNが返ります。
Math.sqrt( -1.0 ) → マイナス値の平方根は計算できないので結果は、NaN
非数値かどうかの判定には以下のメソッドを使います。
Double.NaNメソッド
public static boolean Double.isNaN( double a )
・引数aで指定した値が非数値(NaN)であるかを判定します。 パラメータ a : double型の数値 戻り値 NaNであればtrue、NaNでなければfalse
Float.NaNメソッド
public static boolean Float.isNaN( float a )
・引数aで指定した値が非数値(NaN)であるかを判定します。 パラメータ a : float型の数値 戻り値 NaNであればtrue、NaNでなければfalse
Javaソースコード その1
以下のJavaのソースコードは、Math.sqrtメソッドに-1.0を渡して、その結果を表示するものです。
CalcError1.java
001 002 003 004 005
public class CalcError1 { public static void main( String[] args ) { System.out.println( "-1.0の平方根=" + Math.sqrt( -1.0f ) ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis CalcError1.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac CalcError1.java
実行
C:\talavax\javasample>java CalcError1
出力結果
-1.0の平方根=NaN
Javaソースコード その2
CalcError2.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014
public class CalcError2 { public static void main( String[] args ) { double a; // -1.0の平行根を計算 a = Math.sqrt( -1.0f ); // aがNaNかどうか判定 if ( true == Double.isNaN( a ) ) System.out.println( "計算結果が無効です" ); else System.out.println( a ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis CalcError2.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac CalcError2.java
実行
C:\talavax\javasample>java CalcError2
出力結果
計算結果は無効です
以上です。