- ベストアンサー
C#のfor文に関する質問
- C#のfor文に関する質問です。for文内の計算式の結果を正しく理解できないため、質問しました。
- 具体的には、for文の1回目のループの最終行でのfactの値が0になるかどうかについての疑問です。
- 理解できない計算式を含むコードの解釈について、初心者ながら質問をしています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ですね。 数学的には合っているけど、プログラム的には間違っているんです。 sinを展開して計算してるんですが、最初に0の階乗は1に定義されるのでそれをプログラミングしなければなりません。(テーラー展開) 安直に if (fact==0){fact=1;} を入れるんですね。
その他の回答 (3)
- masatsan
- ベストアンサー率15% (179/1159)
ごめんなさい。何度も。 x*=xx; で良いのですね。 最初に xx=-x*x やってました。お恥ずかしい。あまり見ずに回答して申し訳ない。
お礼
いえいえ、とんでもありません。 xxという名前があまりよくないということでしょう。 自分でコードを書くときには気をつけたいと思いました。 ありがとうございました。
- masatsan
- ベストアンサー率15% (179/1159)
そうですね。 それから x *= -xx; ですね。
- masatsan
- ベストアンサー率15% (179/1159)
No1です。ごめんなさい。私も間違っている。単にif文いれただけではだめです。 初期化しているのに(0!で割る最初の項)iのまわし方が正しくない。 というか色々やり方はあるので考えてください。 少なくともこのままではsinが正しく出てこないばかりか、0割エラーになることは正しいです。 http://akita-nct.jp/yamamoto/lecture/2006/3E/2nd/html/node2.html ここにsinのテーラー展開が記述されていますので、それのようにプログラミングする。 間違ってごめんなさい。
お礼
ご丁寧にありがとうございます。 多分、ループの部分を ------------------------------------------------ for (int i = 1; i < 101; ++i) { ++i; fact *= i; ++i; fact *= i; x *= xx; sin += x / fact; } ------------------------------------------------ とでもするんでしょうかね。
お礼
サンプルが変だったんですね。 半分安心しました。 疑ってかかりながら読むのは初心者にはキツイですが納得です。 ありがとうございました。