0

これがばかげた初心者の問題であるならば、私を許してください、しかし、私は本当にそれを理解しません。

私は次のように宣言されたメンバー変数を持っています:

public Double Value;

3.14159265をValueに割り当て、その正弦を計算しようとすると、次のようになります。

system.out.println(Value.toString()); //outputs 3.14159265
Value = Math.sin(Value);
system.out.println(Value.toString()); //outputs NaN

実際、これは私が試したすべての値で発生します-たとえ0でも!Math.sin()は、引数の値に関係なく、結果として常にNaNを生成するようです。

ドキュメントによると:

引数がNaNまたは無限大の場合、結果はNaNになります。

しかし、私の議論は明らかにNaNや無限大ではありません!

一体何が起こっているのですか?

アップデート

私は地球上で最も愚かなプログラマーであることがわかりました。私のプロジェクトでは、もちろんコード全体が上記の例よりもはるかに複雑です。これは一種の式パーサーおよびエバリュエーターであり、定義された数学関数については、switch句を使用して、呼び出す関数を決定します。sqrt関数が負のパラメーターで実行される原因となった場合のbreakステートメントを忘れました。

私が言ったように-地球上で最も愚かなプログラマー...

最高の私見なので、一番上の答えを受け入れました。時間を無駄にしてすみません-.-

4

3 に答える 3

11
Double value = 3.14159265;
System.out.println(value.toString()); //outputs 3.14159265
value = Math.sin(value);
System.out.println(value.toString()); //outputs NaN

出力(期待どおり):

3.14159265
3.5897930298416118E-9

問題はどこか別の場所にあるはずです。どのバージョンのJDKを使用していますか?32ビットですか64ビットですか?貼り付けなかった他のコードが途中にありますか?

NaNからを取得する唯一の方法は、パラメータとしてoをMath.sin使用することです。そして、その値を明示的に割り当てずに、間違った計算を行うだけで取得できる数値を取得できます。例:infNaN

Double d = 0.0/0.0;
System.out.println(Math.sin(d));
double d2 = Double.POSITIVE_INFINITY;
System.out.println(Math.sin(d2));

これは次のように出力します:NaN2回。

2つのメモ:

  • 変数に大文字を使用しないでください(使用するvalue、ではないValue
  • パラメータとして刺し傷が必要な場合(または他の文字列に合成されている場合)、明示的に呼び出す必要はありませtoString()ん。System.out.println(value)
于 2010-03-18T15:28:24.370 に答える
5

これは私が得るものです:

Double Value;
Value = 3.14159265 ;
System.out.println(Value.toString()); //outputs 3.14159265
Value = Math.sin(Value);
System.out.println(Value.toString()); //outputs 3.5897930298416118E-9

したがって、2つのオプションがあります。

  1. 投稿したコードは、使用しているコードではありません(システムに小文字のSがあることに気付いたので、これはコンパイルされません)
  2. Math.sinを実行する前または後に、他の何かがValueの値をNaNに変更しています
于 2010-03-18T15:29:48.803 に答える
3

手始めにDouble、プリミティブ型ではなく、参照(ラッパー)型を使用していますdouble-なぜですか?初期化に実際に使用しているコードは何ですかValue(ところで、一般的なJavaコーディング標準に基づく大文字で始めるべきではありません)?私の推測では、あなたはValue正しく初期化していないだけだと思います。double(ではなく)を使用して開始してみてくださいDouble

于 2010-03-18T15:28:00.093 に答える