Комплексне число записують у вигляді 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))
Оскільки вбудованою підтримкою комплексних чисел користуватися не можна, реалізуймо такі операції:
Піднесення комплексних чисел до степеня потребує експоненційної функції, а також функцій синуса й косинуса, жодної з яких немає у WebAssembly. На щастя, для їх обчислення можна скористатися рядом Тейлора. Точність має бути принаймні 1/26!, щоб отримані значення збігалися з очікуваними.
exp(x) ≃ 1 + x + x ^ 2 / 2! + x ^ 3 / 3! + x ^ 4 / 4! + ... + x ^ n / n!
sin(x) ≃ x - x ^ 3 / 3! + x ^ 5 / 5! - x ^ 7 / 7! + ... - x ^ n / n!
cos(x) ≃ 1 - x ^ 2 / 2! + x ^ 4 / 4! - x ^ 6 / 6! + ... - x ^ n / n!
Зареєструйтеся на Exercism, щоб вивчати й опановувати WebAssembly, а також 87 вправ та справжнє наставництво від людей, і все це безкоштовно.