数学の平方根では、負の数の平方根を求めると虚数解が得られます。しかし、Javaにはもともと虚数を表現する手段が含まれていません。そのため、Mathクラスにある平方根を求めるsqrtメソッドの引数に負の数を与えると「NaN」が返されます。これは、非数(Not a Number)を表すビットパターンであり、Java以外の言語でも採用されている表記方法です。 ある値がNaNかどうかは、Doubleクラス等のisNaN()メソッドで確認できますが、ここで問題なのは、「-2の平方根」も「-3の平方根」もNaNになってしまうため、NaNである式どうしは(例え同じ負の数の平方根であっても)絶対に「==」にならないということです。 よって、下記のように、変数xに「2の平方根」が代入されている場合には「x == Math.sqrt(2)」はtrueになりますが、変数xに「-2の平方根」が代入されている場合に