PDA

View Full Version : محاسبه مقدار Pi



ehsan_faal
دوشنبه 09 تیر 1393, 22:52 عصر
سلام.این کد رو نوشتم که واسم مقدار عدد پی رو بیشتر از چیزی که متلب نشون میده محاسبه کنه،اما با اینکه با اجرای این کد سیستم واسه چند ثانیه صدای فنش درمیاد اصلا جواب قابل قبولی نمیده بهم،متلب در عرض چند ثانیه تا 40-30 رقم بهم میده.اگه ممکنه راهنماییم کنید.

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
cout<<" A code For Calculate Pi Value-Priest Programming @ Your Service\n"<<endl;
long long int i=1;
long double sum,sum_odd=0,sum_even=0,expansion_value;
for(i=1;i<=1000000000;i++)
{
expansion_value=(double)1/(2*i-1);
if (i%2==1)
{
sum_odd+=4*expansion_value;
}
else
{
sum_even+=-4*expansion_value;
}
sum=sum_even+sum_odd;
}
cout<<"Pi Value Is:"<<setprecision(200)<<sum<<endl;
}

مسعود اقدسی فام
دوشنبه 09 تیر 1393, 23:38 عصر
expansion_value=1 / (double)(2*i-1)




این خط رو اصلاح کنید

ehsan_faal
دوشنبه 09 تیر 1393, 23:41 عصر
ممنون درست شد.میشه دلیلش رو هم بگید من تازه کارم.هنوز چیزی بلد نیستم:لبخند:

مسعود اقدسی فام
دوشنبه 09 تیر 1393, 23:41 عصر
و یا





expansion_value=1.0/(2*i-1)



زمانی که به فرم کد خودتون می‌نویسید، اول تقسیم عدد صحیح یک بر مخرج (تقسیم صحیح) انجام می‌شه (که خارج قسمت صفر تولید می‌کنه) و بعد تبدیل به double می‌شه. اما این دو حالت که نوشتم تقسیم اعشاری انجام می‌شه.

مسعود اقدسی فام
دوشنبه 09 تیر 1393, 23:48 عصر
ممنون درست شد.میشه دلیلش رو هم بگید من تازه کارم.هنوز چیزی بلد نیستم:لبخند:

زبان خانواده‌ی C زمانی که دو طرف تقسیم اعداد صحیح باشن خارج قسمت تولید می‌شه. یعنی مثلا عدد ۲ صحیح تقسیم بر عدد ۴ صحیح خروجی صفر تولید می‌کنه (و نه نیم اعشاری). پس زمانی که قصد دارید دو عدد صحیح رو به صورت اعشاری تقسیم کنید، باید یکی رو به صورت موقت تبدیل به float یا double کنید.

کدی که شما نوشته بودید اول تفسیم صحیح رو انجام می‌داد (با خروجی صفر) و بعد تبدیل موقت به double‌ می‌کرد که عملا هیچ سودی نداشت. کد اول اصلاح شده مخرج رو به صورت موقت به عدد اعشاری تبدیل می‌کنه و کد دوم صورت رو به صورت یک اعشاری معرفی می‌کنه. هر دوی این حالتا باعث تقسیم اعشاری می‌شن که مد نظر شما بود.