PDA

View Full Version : یه سوال که واسه ی تو راحته-برام حلش می کنی؟



fkaz_fkaz
چهارشنبه 21 آذر 1386, 23:43 عصر
:متفکر:چه طور میشه باc برنامه ای نوشت که عدد پی رو تا 15 رقم اعشار حساب کنه

Nima_NF
پنج شنبه 22 آذر 1386, 16:28 عصر
برای این کار روش ها ی مختلفی وجود دارد و توسط افراد مختلفی ارائه شده است ،
به دو سایت زیر مراجعه و با یکی از فرمول ها این کار را انجام دهید:

Pi and the Fibonacci Numbers (http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/fibpi.html)
ویکی پدیا (http://en.wikipedia.org/wiki/Pi)

fkaz_fkaz
جمعه 23 آذر 1386, 19:00 عصر
من برنامه زیر رو نوشتم هیچ eror یا warning هم نمیدهد فقط وقتی می خواهم آن را ارا کنم اجرا نمی شود


#include <stdio.h>
#include <conio.h>
long double fpi(void);
void main()
{
printf("%f",fpi());
getche();
}
long double fpi(void)
{
long double p2=0,p1,r,i=1;
int sign=1;
do{
p1=p2;
p2+=(4/i)*sign;
sign=-sign;
i+=2;
r=(p2-p1)>0?(p2-p1):(p1-p2);
}
while(r>0.0000000000000001);
return(p2);
}

Nima_NF
جمعه 23 آذر 1386, 19:24 عصر
برنامه شما درست است و مشکلی ندارد ، فقط :
1) برای print %.15 گذاشتم تا 15 رقم اعشار نشان دهد.
2) مقدار مقایسه شما آن قدر بزگ است که چند دقیقه وقت نیاز دارد تا برای رسیدن به
r> 0.0xxx0001 محاسبه انجام شود .
پس تعداد صفر بیشتر یعنی دقت بیشتر و اما زمان بیشتر. یا ان ها را کم کنید مثل زیر یا پیام در حال محاسبه را نشان دهید:




#include <stdio.h>
#include <conio.h>

long double fpi(void);

void main()
{
printf("%.15f",fpi());
getche();
}

long double fpi(void)
{
long double p2=0,p1,r,i=1;
int sign=1;
do{
p1=p2;
p2+=(4/i)*sign;
sign=-sign;
i+=2;
r=(p2-p1)>0?(p2-p1):(p1-p2);
}
while (r>0.0001);
return(p2);
}