ln3の近似値

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
eri

ln3の近似値

#1

投稿記事 by eri » 6年前

以下のプログラムは学校の方で教えてもらった台形近似でln2を見積もるプログラムなのですが、これをln3を見積もるプログラムにしたいです。
どういう風に変えればいいのかがわからず困っています。
分かる方教えてください。

コード:

#include<stdio.h>
#define	K	30

int keta(double S1,double S2){
	int si1=(int)S1;
	int si2=(int)S2;
	int j=0;
	while(j<K){
		S1=(S1-si1)*10.0;
		si1=(int)S1;
		S2=(S2-si2)*10.0;
		si2=(int)S2;
		if(si1==si2)break;
		j++;
	}
	return j;
}

int main(void){
	int i,j,k;
	long n=1;
	double S1,S2;
	
	for(k=1;k<K;k++){
		S2=0.75/n;
		for(i=n+1;i<n*2;i+=1) S2+=1.0/i;
		
		n*=2;
		S1=0.0;
		for(i=n+1;i<n*2;i+=2) S1+=2.0/i;
		
		j=keta(S1,S2);
		printf("%2.d   %9.1d   %5.15f   %5.15f  ",k,n,S1,S2);
		if(S2>S1) printf("%2.1d\n",j);
		else{		printf("\n");break;}
	}
	return 0;
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ln3の近似値

#2

投稿記事 by みけCAT » 6年前

コード中の2っぽい部分を3っぽくしたら、求まるようです。
どうしてこれでいいのかは考え中です。

コード:

#include<stdio.h>
#define	K	30

int keta(double S1,double S2){
	int si1=(int)S1;
	int si2=(int)S2;
	int j=0;
	while(j<K){
		S1=(S1-si1)*10.0;
		si1=(int)S1;
		S2=(S2-si2)*10.0;
		si2=(int)S2;
		if(si1==si2)break;
		j++;
	}
	return j;
}

int main(void){
	int i,j,k;
	long n=1;
	double S1,S2;
	
	for(k=1;k<K;k++){
		S2=0.75*3/2/n;
		for(i=n+1;i<n*3;i+=1) S2+=1.0/i;
		
		n*=2;
		S1=0.0;
		for(i=n+1;i<n*3;i+=3) S1+=3.0/i;
		
		j=keta(S1,S2);
		printf("%2.d   %9.1d   %5.15f   %5.15f  ",k,n,S1,S2);
		if(S2>S1) printf("%2.1d\n",j);
		else{		printf("\n");break;}
	}
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“C言語何でも質問掲示板” へ戻る