96 :
デフォルトの名無しさん:
ソース:
import java.io.*;
public class AddSub {
public static void main(String[] args) {
double x=7.5;
double y=5.4;
double z;
z=x+y;
System.out.println("x+yは"+z+"です。");
z=x-y;
System.out.println("x-yは"+z+"です。");
}
}
実行結果:
x+yは12.9です。
x-yは2.0999999999999996です。
なぜ上手くいかないのか理由と解決方法を教えてください。
doubleは、2進数で持ってるからと、たまにはマジレスしてみるテスト
うん、正しい結果のようだ。
つーか、Javaに限った話じゃねーべ
BigDecimal でも使え。
>>96 よかったね。こんなにレスがついて。
でも、ここは、Javaの質問スレじゃないんだ。二度とするなよ。
確かに質問スレじゃない。エロでnowな
>>1によっ(略
ついでに忍耐力と芸がないと、自己申告している罠
10進の0.4が2進で循環小数になり表現できないから誤差がでるんですね。
しかし具体てきにどう解決するのかわからーん!
スレちがいでスマン。。。
でも出来たら教えて欲しいです。
分数だ。つーかこのスレタイなんか素敵。
もう一度言おう。
BigDecimal でも使え。
もしくは 10 倍して int で計算しろ。
>>106 何を求めてるのかわからんのだが...
数値をdoubleで表してる限り、それはいつでも
限られた精度しかない近似値だというのはいいよね?
んで、その精度の許す限り良い近似結果がちゃんと得られて
いると思うのだが。
BigDecimalはヘルプを見ても全然わかりません。(ショック!)
今思えば2進で表せないとか近似値といったことでは
足し算はできるのに引き算ができない理由になってないような気が・・・。
どなたかソースを書いてください!!
そしてなぜ足し算はできるのに引き算ができないのか教えて!!
ずうずうしくてスマン。
でも頭が変になりそう。
コンピュータになりたい。
>>110 強いていうならそれがdoubleの仕様だからだ。
有効数字って知ってるか?
>>110 だからぁ。引き算もちゃんとできてるじゃないか。
doubleを使うときには、「何桁の有効数字が欲しいのか」
「それにはdoubleで足りるか」を考えなきゃ。
10進でも同じだよ。2/3を計算したら結果は途中で切らな
きゃ扱えないだろうが。
例えば「小数点以下1桁まで正確なら満足する」のか?
だったら小数点以下2桁目で四捨五入しろ。
「無限桁になるような計算はしないから、10進で厳密な
値が欲しい」のか?
だったらBigDecimalツカエ。