ورود

نسخه کامل مشاهده نسخه کامل : مشکلی در باره برنامه e^x



m.beh
25-04-2007, 17:58
سلام
من یک برنامه توی c++ (البته باید توی cمی نوشتم ولی برنامش گیرم نیومد اگه برنامهی c دارید برام بگذارید)
این برنامه باید محاسبه ی e^x یا exp(x میبود که ط را دریافت کند و تا 50 رقم اعشار e^x از روی سری تیلورش یعنی این سری:


...+!e^x=1+x+(x^2)/2!+(x^3)/3!+(x^4)/4

بدست بیاورد
راستش این برنامهای که من نوشتم امتحانی بود برای 4 رقم اعشار
ولی فقط تا x=1 یا حد اکثر x=2 جواب میده از اون به بعد مثل اینکه اعشار زیاد میاره توی float جا نمیگیره اشتباه میکنه اعداد عجیب غریب میده
تازه اگه هم برای تا 7 رقم اعشار هم کار کنه نمی دونم چهطوری با ید تا 50 رقمشو بنویسم چون توی doubleکمتر از 10 رقم اعشار جا می گیره و توی long double هم که امتحان کردم اصلا نفهمیدم چی کار میکنه
می خواستم از تابع ()exp که تویmath .h نوشته شده و آماده است کمک بگیرم چون فکر می کنم آن ها هم از همین سری استفاده کرده بودند ولی فایلشو که توی world pad باز کردم چیزی دستگیرم نشد جز این 1 خط


double _Cdecl exp (double __x);

میخواستم کمک کنید که چجوری 50 رقم اعشارو می شه توی یک variable ریخت کلا اگه بشه کمکم کنید ممنون می شم. برنامم هم این پایینه:

#include<stdio.h>
#include <math.h>
main(){
float x, m=0; int j=1,o,i=0,m1,m2 ;char k;
scanf("%f",&x) ;
do {m1=m2 ;
if (i<= 0) j=1;
else j=j*i ;
m=m+float(pow(x,i) / j) ;

m2=int(m*(pow(10,4))) ;
i+=1 ;
}
while ( m2!= m1) ;
printf("%5.3f",m);
scanf("%c",k) ;
return 0;
}

koobe
25-04-2007, 18:08
FYI:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

m.beh
28-04-2007, 17:36
سلام رفتم به آدرسی که گفتی چیزی دستگیرم نشد می شه بیشتر توضیح بدی.
در ضمن اگه کسی برنامه ی bigfloatداره کدشو برام بذاره ممنون میشم bigintهم داشتید خوبه.

bad_boy_2007
28-04-2007, 19:18
این مطلب بیشتر به نحوه الگوریتم نویسی بر میگرده باید از لیست پیوندی یا آرایه استفاده کنی و عمل ذخیره سازی رو شبیه سازی نرم افزاری کنی ، مراحل کار برای لیست پیوندی به این شکله :
1- ابتدا اعداد رو کاراکتر به کاراکتر با تابع Getche از ورودی میخونی و در صورت اعتبار (اگر نقطه قبلا زده شده بود مجدد پذیرش نشه ، فقط اعداد پذیرش بشه) میخونی و تو یک لیست پیوندی ذخیره میکنی
2- توابع جمع ، تفریق ، ضرب ، نمایش اعداد رو مینویسی . تابع جمع و تفریق راحته با پشته به راحتی پیاده سازی میشه ، نمایش اعداد هم ساده است فقط میمونه تابع ضرب که خیلی توش باید کار کنی
3-محاسباتت رو با استفاده از این لیست پیوندی ها (بدون هیچ گونه محدودیت در دقت اعشار) انجام بده

یک راه خیلی وقت گیر و پر درد سر راه بالایه یه راه دیگه هم هست که البته محدودیتش از روش خودت کمتره ولی بارزم محدوده اونم اینه که اعدادت رو بصورت صحیح ذخیره کن و اعمال پردازشی رو روش انجام بده و در انتها بصورت اعشاری نمایش بده ، مثلا 0.00000002 رو بصورت 2 روش کار کن در انتها در خروجی بصورت E-8 نمایشش بده

bad_boy_2007
28-04-2007, 19:22
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

m.beh
30-04-2007, 00:58
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ممنون ولی من دانشچوی کامپیوتر نیستم نمیدونم پشته یعنی چی فقط آرایه را می شناسم
واقعا گیر کردم هرچی الگوریتم که به ذهنم می رسید نوشتم ولی کار از بیخ خرابه تقسیم که هیچی ضزب را هم جواب نمیده اگه الگوریتم تقسیم دارید می شه برام بگذارید در حد الگوریتمم باشه کفایت میکنه کد نباشه هم میخونم آخه مشکل یکی دوتا که نیست نمیدونم این(.)علامت تقسیم عدد و اغشار کلی دردسربرام ایجاد کرده اصلا هرچی می نویسم نمی دونم چرا لوپ نامحدود میشه وقتم کم دارم ممنون