プロが教えるわが家の防犯対策術!

C言語の勉強をしている大学生です。
プログラミングをしている中で、質問が3つほど出てきました。
互いに関連しているのでまとめて質問させてください。

無限等比級数を計算するプログラムを作成しました。
これをコンパイルして実行すると、double型で定義しているのに
小数点以下7桁となってしまいます。
doubleは15桁ということなので、15桁で出力したいのです。
これが1つめの質問です。

<実行結果>
input n:10
1.500000
1.750000
1.875000
1.937500
1.968750
1.984375
1.992188
1.996094
1.998047

pow関数がmath.hに含まれているのかも定かではなく、
インターネットでmath.hというものがあると書いてあったので、
インクルードしてみましたが、これは適切でしょうか?
これが2つめの質問です。

最後になりますが、インターネットで多倍長ライブラリというものが
あるということを知りましたが、この使用方法がわかれば具体的な例を
挙げながら教えていただきたいと思います。

------------------------------------------------------------
#include <stdio.h>
#include <math.h>

int main(void)
{
int n;
int i;
double total;

printf("input n:");
scanf("%d",&n);

if (n<1){
printf("unable\n");
return 0;
}

for(i=1; i<n; i++){
total += 1.0 / pow(2.0,i);
printf("%f\n",total+1.0);
}


}
------------------------------------------------------------

A 回答 (2件)

はじめ2つだけ.


1)printf関数は桁数等を制御する記法が存在します.
%fの部分をたとえば%1.15fとかくと,精度が15桁となります.
2)計算結果を見れば.合っていることがわかるのでは?

参考URL:http://wisdom.sakura.ne.jp/programming/c/c57.html

この回答への補足

お返事ありがとうございます。
フォーマット指定子というものがあったとは。
僕の持っている初心者向けの本には載ってませんでした。
解決しました。

補足日時:2005/11/30 22:39
    • good
    • 0

1.


> printf("%f\n",total+1.0);
の部分を
< printf("%.15f\n",total+1.0);
とすれば良いでしょう。

2.
標準的な環境ではpow関数はmath.hで宣言されています。

3.
多倍長ライブラリはそのライブラリのマニュアルを参照しましょう。
標準仕様はないので、少なくとも具体的なライブラリの指定がなければ使い方を説明することは不可能です。
    • good
    • 0
この回答へのお礼

解決しました。ありがとうございます。
他にも二項分布などのちょっとしたプログラムを作っていて、
数学の勉強のためにもっと精度の高い結果が欲しいと思っていましたが、
15を30にしたら桁数が増えたので、多倍長ライブラリを使わなくても十分でした。
余力があれば、多倍長ライブラリも使ってみます。

お礼日時:2005/11/30 22:55

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