the_king عزیز خیلی ممنون از پست کاملتون.
من خودم درس اسمبلی را خیلی وقت پیش داشتم. این برنامه را هم تا حدود زیادی فهمیدم. ولی مشکل اینجاست که من دارم یه پروژه دانشجویی خیلی در سطح پایین مینویسم برای یکی از دوستام. و نمیتونم ار این سطح دستورات استفاده کنم. اگه بتونی یکم سطح پایین تر راهنماییم کنی خیلی ممنون میشم.
خودم دارم روی حلقه کار میکنم که با حلقه بنویسمش
برای یک برنامه در سطح مبتدی موضوع خیلی سختی انتخاب کرده اید، چون محاسبه Ln نیازمند محاسبات
اعشاریه که یا بایستی توسط کمک-پردازنده انجام شوند و یا خودتان روتین هایی برای ضرب و تقسیم و توان
اعشاری ایجاد کنید که خودش کار را پیچیده می کند. مخصوصا محاسبه e ^ x پیچیده است، چون x یک عدد
اعشاری است و با ضرب کردن پی در پی e در خودش قابل محاسبه نیست.
اگر می خواهید با حلقه پیاده سازی اش کنید بایستی از متد تقریبی نیوتون استفاده کنید، فرض کنیم که
x همان عددی باشد که می خواهیم (Ln(x را محاسبه کنیم :
1) ابتدا یک متغیر اعشاری a را برابر یک مقدار حدسی مثلا 1 قرار دهید.
2) مقدار اعشاری e (یعنی 2.71828182845905) را متغیر e قرار دهید.
3) مقدار نزدیک به صفر یک متغیر اعشاری epsilon را برای دقت محاسبه حلقه تعیین کنید، مثلا 0.0001
4) فرمول y = e ^ a را محاسبه کنید. بدیهی است که a اعشاری است و محاسبه کردن e به توان a خودش
یک روتین پیچیده است.
5) از اختلاف مقدار میان y و x قدر مطلق گرفته و در متغیری نظیر d قرار دهید. (|d = |x - y)
6) اگر مقدار d کمتر از epsilon بود، پس ما (Ln(x را با تقریبی در حد epsilon محاسبه کرده ایم و می توانیم به
مرحله آخر (مرحله 10) برویم.
7) مقدار جدید a را با فرمول (a = a - ((y - x) / y محاسبه می کنیم.
8) اگر مقدار a از عدد بزرگی مثل 200 بیشتر شد، آنرا به همان حد 200 تغییر می دهیم.
9) مجددا به مرحله 4 بر می گردیم و حلقه تکرار می شود.
10) مقدار a برابر (Ln(x بوده و با دقت epsilon محاسبه شده است.
پیاده سازی این الگوریتم خیلی پیچیده تر از استفاده از دستورات کمک-پردازنده است، مخصوصا که بعد از نوشتن
آن الگوریتم بایستی برای محاسبه e ^ a از سری های ریاضی کمک بگیرید :
یک راه ساده تر هم این است که مقادیر e ^ 1 و e ^ 0.1 و e ^ 0.01 و ... رو قبلا در متغیر هایی ذخیره کرده و
از فرمول زیر برای ضرب کردن پی در پی این متغیر ها در هم استفاده کنید :
البته روتین های جمع و تفریق و ضرب و تقسیم اعشاری را به هر حال بایستی بسازید.