- ベストアンサー
C言語の演算式とは?
- C言語のプログラミングで、4×(1-1/3+1/5-1/7+・・・・・)の式を100000項まで合計した式を作る方法を教えてください。
- 自分で作成したプログラムでは答えが0になってしまいます。正しい答えを求めるためにはどうすればよいでしょうか?
- C言語の演算式を計算する際には、ループを用いて項を足し合わせる必要があります。適切なループ処理を行うことで正しい答えを得ることができます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
C 言語では int 型同士の四則演算は結果も int 型になります。 特に、除算では小数点以下を切り捨てた値を返します。 つか、除算結果を集計する a もその結果を 4 倍する b も int 型じゃないですか。これでは小数点以下が無視されます。 というわけで、a と b を double 型にして、除算の分母側を double にキャストしてください。
その他の回答 (4)
- asuncion
- ベストアンサー率33% (2127/6290)
#include <stdio.h> int main(void) { double s; int i; for (s = i = 0; i < 100000; i++) { double a = 1.0 / (2 * i + 1); s += (i % 2 == 0) ? a : -a; } printf("%f\n", 4 * s); return 0; } 100000項では、誤差が多少出るようです。
お礼
みなさま回答ありがとうございました。 初心者なもので皆様の回答大変ためになります。 アドバイスをもとに明日もう一度やってみます。 とくに答えが0になるのがお手上げだったので、その原因を書いてくださったno.1の方をベストアンサーとさせて頂きます。 ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
あえてさらに突っ込むなら なんで do~while かな. ちなみに「普通レベル」がどの分野の「普通」かにもよりますね>#3. 数値計算なら「普通」どころか「最初」といってもいいレベルだし.
お礼
みなさま回答ありがとうございました。 初心者なもので皆様の回答大変ためになります。 アドバイスをもとに明日もう一度やってみます。 とくに答えが0になるのがお手上げだったので、その原因を書いてくださったno.1の方をベストアンサーとさせて頂きます。 ありがとうございました。
- foomufoomu
- ベストアンサー率36% (1018/2761)
他にもいろいろ突っ込みどころのあるプログラムなんですが、たぶん誰も書かないし普通レベルの本にも載ってないつっこみを。。。 このように、たくさんの数を足し算引き算するときは、大きな数→小さな数 の順に計算すると誤差が大きくなります。 小さな数→大きな数、すなわち 1/999999 項 から始めて、1 項 で終わるようにループを作りましょう。 よって for(i=99999; i>0; i-=2) でループすればよいです。
お礼
みなさま回答ありがとうございました。 初心者なもので皆様の回答大変ためになります。 アドバイスをもとに明日もう一度やってみます。 とくに答えが0になるのがお手上げだったので、その原因を書いてくださったno.1の方をベストアンサーとさせて頂きます。 ありがとうございました。
- yukichance
- ベストアンサー率13% (9/67)
int a,b;doubleにすればいいけども、 変でない?!なぜ開始a=1で、出力b-1?
お礼
みなさま回答ありがとうございました。 初心者なもので皆様の回答大変ためになります。 アドバイスをもとに明日もう一度やってみます。 とくに答えが0になるのがお手上げだったので、その原因を書いてくださったno.1の方をベストアンサーとさせて頂きます。 ありがとうございました。
お礼
みなさま回答ありがとうございました。 初心者なもので皆様の回答大変ためになります。 アドバイスをもとに明日もう一度やってみます。 とくに答えが0になるのがお手上げだったので、その原因を書いてくださったno.1の方をベストアンサーとさせて頂きます。 ありがとうございました。