dポイントプレゼントキャンペーン実施中!

#include <stdio.h>
const double PI=3.141592653589793;
double sum(long m)
{
double n,term,sum;
n=1; sum=0;
term= 1.0/ (n*n);/*初項*/
while( n<=m ){
sum+=term;
n++;
term= 1.0/ (n*n);/*次項の計算*/
}
return sum;
}

/*この計算の答えはπ*/
int main(void)
{
double s;
long m;
int i;
m=1;
for(i=0;i<9;i++){
s=sum(m);
printf("%2d m=%10ld sum= %22.16e err= %22.16e \n",i,m,s,s-PI*PI/6);
m*=10;/*次は10倍にする*/
}
return 0;

で真の値と計算結果を調べるにはどうしたらいいのでしょうか?

A 回答 (1件)

>で真の値と計算結果を調べるにはどうしたらいいのでしょうか?


通常の方法では、真の値と計算結果を調べる方法は存在しません。これは、double型を使用していることからの制約から発生します。double型(8バイト)は有効数字が13~14桁までしかもてません。さらに、有効数字を大きくとるためにはlong double型(16バイト)というのもありますが、コンパイラによっては、この型をサポートしていません。(sunのfort-cコンパイラで使用した記憶がありますが、他のコンパイラで、使用できるかどうかは不明です)
では、どうするかというと、有効数字が100桁でも200桁でも望むだけの桁数がとれるような型を自分で作ってしまえばよいわけです。このような試みを、過去に行った人がいます。このような型を多倍長型といいます。望むだけの整数の桁数が計算できる整数型を多倍長整数といいます。望むだけの浮動小数点の桁数が計算できる実数型を多倍長浮動小数点といいます。
「多倍長」「浮動小数点」をキーワードにして検索をかけてみてください。

参考URL:http://www5.airnet.ne.jp/tomy/cpro/mpaman.htm
    • good
    • 0

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