重複の可能性:
tan 45 で 0.9999 となる
私が使用するtan
と、長い長い答えが得られます:
double degrees = 45.0;
double radians = Math.toRadians(degrees);
System.out.println(Math.tan(radians));
このコードを実行すると、次のようになります。
0.9999999999999 repeating
なんで?
重複の可能性:
tan 45 で 0.9999 となる
私が使用するtan
と、長い長い答えが得られます:
double degrees = 45.0;
double radians = Math.toRadians(degrees);
System.out.println(Math.tan(radians));
このコードを実行すると、次のようになります。
0.9999999999999 repeating
なんで?
double (または実際には double の下にあるシステム、IEEE754) は完全ではないためです。double と float を扱うときは、常にこれに注意してください (Java だけでなく、どの言語でも)。
なぜだめですか?これは 1 に近いです。浮動小数点演算は決して正確ではありません。その理由は、CPU 内の数値が 2 進数で表現されるためです。
また、2 進数のフーティング ポイント表現は、たとえば 1/10 などを正確に表すことはできません。
浮動小数点プログラミングについて少し読んでください。