Task 4: Dual Numbers
Dual Numbers
In this task, you are required to implement a basic version of dual number. Dual numbers are conceptually similar to complex number.
A dual numbers \(n\) is of the following form:
\[ z = a + \epsilon b \]
with the following identity:
\[ \epsilon ^2 = 0 \]
Adding two dual numbers is done component-wise:
\[ (a + \epsilon b) + (c + \epsilon d) + (a+c) + \epsilon (b + d) \]
Subtracting two dual numbers is also done component-wise:
\[ (a + \epsilon b) - (c + \epsilon d) = (a + \epsilon b) + (-c - \epsilon d) = (a - c) + \epsilon(b - d) \]
Using the identity above, multiplying two dual numbers gives
\[ (a + \epsilon b)(c + \epsilon d) = ac + \epsilon(ad + bc) \]
Tasks
You are required to extend the provided implementation of dual numbers
by adding the implementation for various arithmetic operators in
DualNumber.cpp
.
Task 1: Addition operator
Implement the addition operator
DualNumber operator+(const DualNumber& dn1, const DualNumber& dn2)
in file DualNumber.cpp
.
Task 2: Subtraction operator
Implement the subtraction operator
DualNumber operator-(const DualNumber& dn1, const DualNumber& dn2)
in file DualNumber.cpp
.
Task 3: Multiplication operator
Implement the multiplication operator
DualNumber operator*(const DualNumber& dn1, const DualNumber& dn2)
in file DualNumber.cpp
.
Solution
#include "DualNumber.h"
DualNumber operator+(const DualNumber &dn1, const DualNumber &dn2) {
DualNumber res;
double a = dn1.a + dn2.a;
double b = dn1.b + dn2.b;
res.a = a;
res.b = b;
return res;
}
DualNumber operator-(const DualNumber &dn1, const DualNumber &dn2) {
DualNumber res;
double a = dn1.a - dn2.a;
double b = dn1.b - dn2.b;
res.a = a;
res.b = b;
return res;
}
DualNumber operator*(const DualNumber &dn1, const DualNumber &dn2) {
DualNumber res;
double a = dn1.a * dn2.a;
double b = (dn1.a * dn2.b) + (dn1.b * dn2.a);
res.a = a;
res.b = b;
return res;
}
Made by JirR02 in Switzerland 🇨🇭