• ベストアンサー

0.1の10000回の累積

Cプログラムで、0.1を10000回累積するにはどうすればいいのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

以下のようにして下さい。 //0.1を10000回累積 double ruiseki = 0.0; int i; for (i=0; i <10000; i++){ ruiseki = ruiseki + 0.1; } printf("ruiseki=%f\n",ruiseki);

candlize
質問者

お礼

できました!!!!!!!!本当にありがとうございます☆☆ あれ…でもなんで0.1が使えたんだろう…? ともかく、完成できました☆☆本当に、本当にありがとうございました!!!!!!!!!!!!!!

その他の回答 (5)

noname#7734
noname#7734
回答No.6

汚してばかりでごめんなさい。 誤差なしというのは誤りです。 ただ、表記の違いは通常コンパイラが面倒見てくれますので、 特に気にしなくてよいかと思います。

candlize
質問者

お礼

ありがとうございました。

noname#7734
noname#7734
回答No.5

#3 です。 累乗として答えてしまいました。 累積だと、普通は累積加算のことですね・・・。 ちなみに、0.1なら、浮動小数点の正規化で誤差が生じないので、 そのまま使っても大丈夫です。0.2とかはダメです。 この辺は、小数の2進表記の一般論とは異なります。

candlize
質問者

お礼

わざわざ訂正して頂いてありがとうございました。

noname#7734
noname#7734
回答No.3

誤差の問題もありますが、 そもそも1E-10000は、float型やdouble型では表せません。 (絶対値がとても大きい値が扱えないように、 絶対値がとても小さい値も扱えません) 1E-10000を扱いたいならば、(C標準以外の)数学ライブラリを使うか、 自分で高精度のライブラリを作る必要があります。 単純な計算方法の話なら、pow() などを使えば簡単にできます。

candlize
質問者

お礼

詳しいご説明ありがとうございました。でもレベルが高すぎて私には分かりません…。

  • kmb01
  • ベストアンサー率45% (63/138)
回答No.2

0.1には誤差があるので可能な限り使用を避けるべきです。 この場合は1.0を10000回累積してから10.0で割るなどで代用できます。

candlize
質問者

お礼

とても参考になりました。ありがとうございました。

  • chukanshi
  • ベストアンサー率43% (186/425)
回答No.1

0.1をプログラム中に0.1と書いてはいけません。2進法で10進法の0.1は無限小数になります。 0.1は1.0e^-1として計算しましょう。

candlize
質問者

お礼

あっそうか!!コンピュータの中では全部二進法になるんでした…。大切な事を思い出させて下さってありがとうございました☆☆

関連するQ&A