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

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

A 回答 (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);
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/08/27 00:30

汚してばかりでごめんなさい。



誤差なしというのは誤りです。

ただ、表記の違いは通常コンパイラが面倒見てくれますので、
特に気にしなくてよいかと思います。
    • good
    • 1
この回答へのお礼

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

お礼日時:2004/08/27 00:38

#3 です。



累乗として答えてしまいました。

累積だと、普通は累積加算のことですね・・・。

ちなみに、0.1なら、浮動小数点の正規化で誤差が生じないので、
そのまま使っても大丈夫です。0.2とかはダメです。
この辺は、小数の2進表記の一般論とは異なります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/08/27 00:35

誤差の問題もありますが、


そもそも1E-10000は、float型やdouble型では表せません。
(絶対値がとても大きい値が扱えないように、
絶対値がとても小さい値も扱えません)

1E-10000を扱いたいならば、(C標準以外の)数学ライブラリを使うか、
自分で高精度のライブラリを作る必要があります。

単純な計算方法の話なら、pow() などを使えば簡単にできます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/08/27 00:24

0.1には誤差があるので可能な限り使用を避けるべきです。


この場合は1.0を10000回累積してから10.0で割るなどで代用できます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/08/27 00:21

0.1をプログラム中に0.1と書いてはいけません。

2進法で10進法の0.1は無限小数になります。
0.1は1.0e^-1として計算しましょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/08/27 00:19

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