ورود

View Full Version : سوال: به دست آوردن تابع سیکما در ++c



nazi89
سه شنبه 06 اسفند 1392, 00:01 صبح
سلام دوستان خوبم
من میخواستم برنامه تابع زیر را در C++‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎ بنویسم
sum(.95^i/factorial(i), i = i .. 100)

http://barnamenevis.org/image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZoAAAAyCAIAAAD qXIoDAAACxklEQVR4nO3dO3biQBAF0F6Wj/YzvRztBm0Bp6QiJCZ0LAd4AP1bog0a5t4ICRvs5J2q/ik0AG8hvPoPAMhDnAFvYjjOqhiKsr5d12URQri/178D8FIDcXZJqnZ0Xa6q HO3fwfgxYars2tcNU3TVDHEqvWyfwfg1ebjrP967F2AFxJnwJs QZ8Cb2OTYWV0W5kyBhRLi7Hp1u9u/A/Biows1Wms1rDsDNm DuwKs/QDW2FicXYo aQYst7E4U5sBaz0jzq6Dcd2gur1xHYOTZsBKvTg7lh9hgbib 4bbdvbu ouBDZ/SDFhrsDrbxZSs2sUQwkd5nP6C1uEcVbyr0KrYTi6TpcAjRprNv zXadFody4 5OGtXZHdX10ZTNQZkMT52lpRouzjXbdZlcYus/nL/KirIgCwmpwLSms45twH/4WqsLgslGvCwmZnNtKYz0ehWTIdAAo bX6iRp0TrdJ1t3UkBgOWS1p09nmhTQ2RqMyCHxGW0S5vOuixCK MpmdPnF3YCaygzIIX1XQK6mE BXLNrkJNGA7Vq4Z3MXhRmwTUviTJYBG5YcZwlZtmTreqqH/0Hgf5GWF oyYPMS4mwXM 0KAPhFc3Emy4B/xOwW9NksO5Z/lsRd68gzgGymDwhKqMt2cdGo2k aTWzgBFhl4vjGlB5z7RxBFe1uAvIairNljwtYNeOpOgNy68bZw iefLJon6Byt7RwNIKdnrVPtHqzhkU1AZuNxVp8O4XBKLKASqq3 2j4gzILOn7SLqBJ4zG4HMntls3gdYXZaKMyCnsTg716E N03vOUyXycxOEs13job gd82FGf16RD2 3hO oBL3E2l2TUQW72mdWdAXsPV2Tnu67sn/U5XZ0b1gS0YjLNrp5lCmgGbMBRnVZ3aaTbSDNiKbpx9lYfP8Lk vTl8Jvzzy0DmAF3B6NfAmxBnwJr4B5xZCxHnMcmMAAAAASUVOR K5CYII=

البته برنامه زیر را هم نوشتم که حین اجرا خطای floating point divide by zero را میده
از کمکتون پیشاپیش تشکر میکنم






#include <iostream.h>
#include <math.h>
int fact (int );
int main()
{
int n=100;
float x=.95;
float sum;
for(int i=1;i<=n;i++)
sum += ((pow(x,i))/fact(i));
return sum;
}
int fact (int n)
{
if (n==0|| n==1)
return n;

else

return fact (n-1)*n;


}

rahnema1
سه شنبه 06 اسفند 1392, 11:35 صبح
سلام،
اولین نکته اینکه برای فاکتوریل بهتره از متغیری استفاده بشه که جای بیشتری داشته باشه مثلا دابل از فلوت جای بیشتری داره و یا long long جای بیشتری داره
اما یک موقه مثلا به شما می گویند فاکتوریل یک عدد خیلی بزرگ بدست بیاد که دیگه این متغیرها پاسخگو نیستند پس بهتره به جای اینکه فاکتوریل را جدا حساب کنید صد تا تقسیم انجام بدید و این تقسیم ها را ضرب در هم کنید


int n=100;
double s=0;
double p=1;
for(int i=1;i<=n;++i) s+=(p*=0.95/i);