یک عدد مختلط به شکل 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))
با توجه به اینکه نباید از پشتیبانی داخلی زبان برای اعداد مختلط استفاده کنید، این عملیات را پیادهسازی کنید:
این یک تمرین شیءگرا است: شما ComplexNumbers را به شکل یک کلاس پیادهسازی میکنید.
تستها دو نمونه از عدد مختلط را از نظر برابری با هم مقایسه میکنند.
یعنی کلاس شما باید «متامتد» __eq را پیادهسازی کند.
تستها همچنین روی اعداد مختلط عملیات حساب انجام میدهند، بنابراین متامتدهای حساب هم وجود دارند که باید پیادهسازی شوند.
بعضی از توابع عدد مختلط با اعداد اعشاری شناور محاسبات انجام میدهند. «برابری» شما باید با اعدادی سر و کار داشته باشد که بهطور تقریبی برابر هستند.
در Exercism ثبتنام کنید تا MoonScript را همراه با 126 تمرین و مربیگری انسانی واقعی یاد بگیرید و در آن استاد شوید، همهی اینها رایگان.