تبلیغات
Pro4 programming - وقتی ماشین حساب مهندسی کم می آورد!

نویسنده :Pourya Alinezhad
تاریخ:1389/05/8-19:51

وقتی ماشین حساب مهندسی کم می آورد!

امروز یکی از هم کلاسی هام از من خواست تا براش مقدار دقیق عبارت cos(3.141583304) را محاسبه کنم. خودش با ماشین حساب مهندسی حساب کرده بود و عدد منفی یک رو جواب گرفته بود.خوب من هم با ماشین حساب خودم امتحان کردم عدد منفی یک رو جواب گرفتم.البته همون طور که واضحه این عدد همان عدد pi تا  8 رقم اعشار است.حالا سوال اینجاست که چرا هم cos(pi)  و هم cos (3.141583304)  دارای یک جواب اند!

خوب معلومه دیگه!ماشین حساب ارقام رو گرد می کنه.تازه این ماشین حساب من تا 9 رقم اعشار بیشتر رو حساب نمی کند و بقیه ی ارقام رو تا 1099± به صورت نماد علمی نمایش می دهد.حالا ما چی کار کنیم!چه جوری مقدار دقیق این عبارت رو به دست بیاوریم؟ اولین چیزی که به ذهنم رسید این بود که برنامه ای بنویسم که عددx  را بگیره و cos(x) را حساب کنه.چه جوری؟ دو راه داشت.اولین راه استفاده از توابع همراه با کامپایلر بود که مثلا در اینجا من از torbo c++ استفاده کردم .می تونستم تابع cos() از سرفایل <math.h> برای نوشتن این برنامه استفاده کنم.اما این تابع هم مقدار دقیق رو به دست نمیدهد چون برای نوشتن همین تابع از سری تیلور تابع cos (x) با تعداد جمله های محدود استفاده شده است.

خوب پس من باید برنامه ای بنویسم که سری تیلور تابع cos(_) را تا تعداد جمله ی دلخواه به دست بیاورد و البته با خطای و دقتی که ما می خواهیم.خوب قبلش یک گوشه ی چشمی هم به matlab می اندازیم تا ببینیم چقدر دقیق برامون حساب می کنه.همون طور که در شکل 2 می بینید مقدار cos(3.141583304) را تا 60 رقم اعشار با matlab  حساب کردم که مقدار...-.99999999995629263000 رو جواب داد.در ادامه به این نتیجه می رسیم که این مقدار زیاد هم دقیق نیست!

این برنامه رو نوشتم و مقدار این عبارت رو تا 50 رقم اعشار حساب کردم و برای این کار 200 جمله ی اول سری cos(x) را حساب کردم.مقدار این بود :

 Cos( 3.141583304 ) = -.9999999999562925850654407521516198700002

در کامپیوتر من که 32 بیتی این عدد دقیق ترین عددی است که می توان به دست آورد.چون دقیقترین نوع داده ای که برای ذخیره ی این عدد می توانم تعریف کنم از نوع  long double است و این نوع دقتی بیشتر از این را به دست نمی دهد.در ادامه وقتی برنامه ی نوشته شده توسط خودم را طوری تغییر دادم تا مقدار cos(x) را تا جملاتی حساب کند که یبه عددی برسیم که باmatlab  به دست آمده بود و به این نتیجه رسیدم که matlab فقط 25 جمله از سری تیلور را حساب می کند!      دانلود برنامه