電子書籍の厳選無料作品が豊富!

プログラミング
java

javaでプログラミングしているのですが、double型の値に正数を足していっているのに値がマイナスになってしまいます

これはなぜでしょうか?
また、どうすれば直る(マイナスにならない)のでしょうか?

よろしくお願いしますm(__)m

質問者からの補足コメント

  • 遅くなり申し訳ありません。
    z-normalizationするためにデータの二乗の合計を足しているのですが、途中でマイナスになってしまいます。

      補足日時:2017/11/03 15:02
  • int型は使ってないのですが

      補足日時:2017/11/03 15:03
  • 確かに自分の思い込みの可能性は否定できません。

    数値に関してはちょっと確認してみます。

    データはdouble型にしてますが、実際には正数で .0 の値になってます

      補足日時:2017/11/04 03:17
  • 数値は
    3.2768E7のような値でした

      補足日時:2017/11/05 17:26

A 回答 (3件)

ありえません。

しょうもない勘違いを見過ごしているだけでしょう。
コードと負と判断した方法を示して下さい。
    • good
    • 0

> z-normalizationするためにデータの二乗の合計を足しているのですが、途中でマイナスになってしまいます。


> int型は使ってないのですが

残念ですが、実際のコードを見ない限り、
・計算方法自体の間違い
・『二乗の合計を求めている』つもり、『intは使っていない』つもり、といった、あなたの思い違い
等を排除することはできません。
プログラムを修正するコツは、「自分は正しい」という思い込みを捨てることです。

printするとかデバッガでステップ実行するとかして確認してみましょう。
例えば
d += x*x ;
みたいになっていたら、
x の値、 x*x の値、足す前のdの値、足した後の d の値、といった変化を確認しましょう。


念の為に確認ですが、 4.2e-12 とかいう感じになってる、というのは無いですね?
    • good
    • 0

具体的に、どんなコードなのでしょう?




int等の整数型は、足し続けると負の値になることがあります。
これは、「符号の無い整数」を「特定の条件を満すものは負とみなす」という運用をしているからです。
https://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7 …

対して、doubleにはそのようなことは起りません。
無限大、という特別な値になります。



Javaでは、計算は順番に行なわれます。
例え、最終結果がdoubleであったとしても、途中の計算はその途中の型で行なわれます。

double d ;
int i = ???? ;
int j = ????? :
d = i + j ;
等とした場合, i + j は (int + int なので) int型で計算され、上記のような「符号が変わる」ことが起る可能性があります。
その後に d に代入しても、その「符号が変わってしまった」値が代入されるだけです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!