- ベストアンサー
0.1の10000回の累積
Cプログラムで、0.1を10000回累積するにはどうすればいいのでしょうか。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
以下のようにして下さい。 //0.1を10000回累積 double ruiseki = 0.0; int i; for (i=0; i <10000; i++){ ruiseki = ruiseki + 0.1; } printf("ruiseki=%f\n",ruiseki);
その他の回答 (5)
汚してばかりでごめんなさい。 誤差なしというのは誤りです。 ただ、表記の違いは通常コンパイラが面倒見てくれますので、 特に気にしなくてよいかと思います。
お礼
ありがとうございました。
#3 です。 累乗として答えてしまいました。 累積だと、普通は累積加算のことですね・・・。 ちなみに、0.1なら、浮動小数点の正規化で誤差が生じないので、 そのまま使っても大丈夫です。0.2とかはダメです。 この辺は、小数の2進表記の一般論とは異なります。
お礼
わざわざ訂正して頂いてありがとうございました。
誤差の問題もありますが、 そもそも1E-10000は、float型やdouble型では表せません。 (絶対値がとても大きい値が扱えないように、 絶対値がとても小さい値も扱えません) 1E-10000を扱いたいならば、(C標準以外の)数学ライブラリを使うか、 自分で高精度のライブラリを作る必要があります。 単純な計算方法の話なら、pow() などを使えば簡単にできます。
お礼
詳しいご説明ありがとうございました。でもレベルが高すぎて私には分かりません…。
- kmb01
- ベストアンサー率45% (63/138)
0.1には誤差があるので可能な限り使用を避けるべきです。 この場合は1.0を10000回累積してから10.0で割るなどで代用できます。
お礼
とても参考になりました。ありがとうございました。
- chukanshi
- ベストアンサー率43% (186/425)
0.1をプログラム中に0.1と書いてはいけません。2進法で10進法の0.1は無限小数になります。 0.1は1.0e^-1として計算しましょう。
お礼
あっそうか!!コンピュータの中では全部二進法になるんでした…。大切な事を思い出させて下さってありがとうございました☆☆
お礼
できました!!!!!!!!本当にありがとうございます☆☆ あれ…でもなんで0.1が使えたんだろう…? ともかく、完成できました☆☆本当に、本当にありがとうございました!!!!!!!!!!!!!!