JirR02 950098d35e Exercise 8
Added Exercise 8 to repository
2025-04-21 19:08:07 +02:00
..
2025-04-21 19:08:07 +02:00

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 🇨🇭