یک عدد مختلط به شکل z = a + b * i بیان میشود، که در آن:
a بخش حقیقی است (یک عدد حقیقی)،
b بخش موهومی است (آن هم یک عدد حقیقی) و
i یکهی موهومی است که در رابطهی i^2 = -1 صدق میکند.
مزدوج عدد مختلط z = a + b * i به این صورت به دست میآید:
zc = a - b * i
قدر مطلق (یا مدول) عدد z به این صورت تعریف میشود:
|z| = sqrt(a^2 + b^2)
مربع قدر مطلق برابر است با حاصلضرب z در مزدوجش zc:
|z|^2 = z * zc = a^2 + b^2
مجموع دو عدد مختلط z1 = a + b * i و z2 = c + d * i با جمع کردن بخشهای حقیقی و موهومی آنها بهطور جداگانه محاسبه میشود:
z1 + z2 = (a + b * i) + (c + d * i)
= (a + c) + (b + d) * i
تفاضل دو عدد مختلط از تفریق بخشهای متناظرشان به دست میآید:
z1 - z2 = (a + b * i) - (c + d * i)
= (a - c) + (b - d) * i
حاصلضرب دو عدد مختلط به این صورت تعریف میشود:
z1 * z2 = (a + b * i) * (c + d * i)
= (a * c - b * d) + (b * c + a * d) * i
معکوس یک عدد مختلط غیرصفر به این صورت به دست میآید:
1 / z = 1 / (a + b * i)
= a / (a^2 + b^2) - b / (a^2 + b^2) * i
تقسیم یک عدد مختلط بر عددی دیگر به این صورت است:
z1 / z2 = z1 * (1 / z2)
= (a + b * i) / (c + d * i)
= (a * c + b * d) / (c^2 + d^2) + (b * c - a * d) / (c^2 + d^2) * i
رساندن e (پایهی لگاریتم طبیعی) به توانی مختلط را میتوان با فرمول اویلر بیان کرد:
e^(a + b * i) = e^a * e^(b * i)
= e^a * (cos(b) + i * sin(b))
با توجه به اینکه نباید از پشتیبانی داخلی زبان برای اعداد مختلط استفاده کنید، این عملیات را پیادهسازی کنید:
دستورالعملهای بالا با یک مخزن مشترک همگامسازی شدهاند تا در همهی مسیرهای زبانی یکدستی تضمین شود. این پیوست در صورت نیاز توضیح بیشتری میدهد یا دستورالعملها را تغییر میدهد تا با اهداف مسیر Clojure همراستاتر باشند.
برای این تمرین در مسیر Clojure، نیازی نیست عملیات توانرسانی را پیادهسازی کنید.