1仕様書無しさん2022/01/14(金) 11:36:27.50
円周率を求めたくて作ったのですが答えが0.000000000000になってしまい円周率が求められません。どこが間違っているのか指摘していただけませんか
2仕様書無しさん2022/01/14(金) 11:38:30.44
#include<stdio.h>
#define KETA 20
void set(int value,int a[],int n){
int i;
for(i=n-1;i>=0;i--){
a[i]=value%10;
value=value/10;
}
return;
}
void print(int a[],int n){
int i=0;
while(a[i]==0 && i<=n-2){
i++;
}
printf("%d.\n",a[0]);
for(i=1;i<n;i++){
printf("%d",a[i]);
}
printf("\n");
}
3仕様書無しさん2022/01/14(金) 11:39:05.85
void kakeru(int a[],int n,double k){
int i,tmp;
int carry=0;
for(i=KETA-1;i>=0;i--){
tmp=a[i]*k+carry;
a[i]=tmp%10;
carry=tmp/10;
}
return;
}
void waru(int a[],int n,int x){
int i,tmp;
tmp=0;
for(i=0;i<KETA;i++){
tmp=tmp*10+a[i];
a[i]=tmp/x;
tmp=tmp%x;
}
}
4仕様書無しさん2022/01/14(金) 11:39:28.46
void hiku(int a[],int b[],int n){
int i;
for (i=KETA-1;i>=0;i--){
a[i]=a[i]-b[i];
if(a[i]<0){
a[i-1]--;
a[i]=a[i]+10;
}
}
return;
}
void tasu(int a[],int b[],int n){
int i;
for(i=n-1;i>=0;i--){
a[i]=a[i]+b[i];
if(a[i]>=10){
a[i]=a[i]%10;
a[i-1]++;
}
}
return;
}
5仕様書無しさん2022/01/14(金) 11:40:30.87
int main(void){
int a[KETA];
int b[KETA];
int t[KETA];
int i,j;
set(0,a,KETA);
for(j=0;j<=360;j++){
set(1,t,KETA);
waru(t,KETA,2*j+1);
for(i=0;i<2*j+1;i++){
waru(t,KETA,5);
}
if(j%2==0){
tasu(a,t,KETA);
}else{
hiku(a,t,KETA);
}
}
kakeru(a,KETA,4);
6仕様書無しさん2022/01/14(金) 11:40:57.27
set(0,b,KETA);
for(j=0;j<=360;j++){
set(1,t,KETA);
waru(t,KETA,2*j+1);
for(i=0;i<2*j+1;i++){
waru(t,KETA,239);
}
if(j%2==0){
tasu(b,t,KETA);
}else{
hiku(b,t,KETA);
}
}
hiku(a,b,KETA);
kakeru(a,KETA,4);
print(a,KETA);
return 0;
}
7仕様書無しさん2022/01/14(金) 11:41:14.21
以上です
8仕様書無しさん2022/01/14(金) 12:02:19.13
完
次回の作品にご期待ください
9仕様書無しさん2022/01/14(金) 14:03:44.28
Cは閉じていないので円周は求められない。
Oにしておけ
10仕様書無しさん2022/01/15(土) 05:55:15.87
円周率はパイ
11仕様書無しさん2022/01/18(火) 07:05:49.89
12仕様書無しさん2022/01/20(木) 00:31:25.52
誰も真面目に答えてなくて草
13仕様書無しさん2022/01/21(金) 02:10:59.87
使ってるアルゴリズムさえわからんのに真面目に答えれるわけないだろ
初心者はこっから始めろ
pi=4*(1-1/3+1/5-1/7+1/9...)
14仕様書無しさん2022/01/21(金) 14:58:59.73
収束が遅いのでだめです
15仕様書無しさん2022/01/22(土) 16:15:28.21
俺は円周率は3って教わったけど違うの?