Skip to content

Simple Math

Learn to perform calculations with quantities. The library handles units automatically!

Goal: Add, subtract, multiply, and divide quantities
Time: ~10 minutes

Math with Quantities

One of mp-units' superpowers: units are handled automatically during calculations.

When you divide distance by time, you get speed (km/h) - no manual conversions needed!

Try It: Basic Operations

// ce-embed height=600 compiler=clang2110 flags="-std=c++23 -stdlib=libc++ -O3" mp-units=trunk
#include <mp-units/systems/si.h>
#include <format>
#include <iostream>

int main()
{
  using namespace mp_units;
  using namespace mp_units::si::unit_symbols;

  // Journey distances
  quantity trip1 = 6 * km;
  quantity trip2 = 2700 * m;

  // Addition: km + m = m (common unit!)
  quantity total_distance = trip1 + trip2;
  std::cout << std::format("Total distance: {}\n", total_distance);

  // Time taken
  quantity time = 2 * h;

  // Division: km / h = km/h (speed!)
  quantity average_speed = total_distance / time;
  std::cout << std::format("Average speed: {}\n", average_speed);

  // Multiplication: speed * time = distance
  quantity distance_traveled = average_speed * time;
  std::cout << std::format("Distance traveled: {}\n", distance_traveled);

  // Subtraction: km - m = m (common unit!)
  quantity difference = trip1 - trip2;
  std::cout << std::format("Difference between trips: {}\n", difference);
}

What happened:

  • Addition/Subtraction: Only works with compatible units (km + m ✅, km + hours ❌)
    • Notice: Adding km + m automatically converted to a common unit (m)
  • Multiplication/Division: Creates new units automatically (km ÷ h = km/h)
  • Dimensional analysis: The library tracks units through all operations

Key insight: The library automatically handles unit conversions and dimensional analysis during calculations.

Valid Operations

Operation Example Result Unit
Addition 120 * km + 80 * km 200 km
Subtraction 120 * km - 80 * km 40 km
Division 120 * km / (2 * h) 60 km/h
Multiplication 60 * km / h * (2 * h) 120 km
Scalar multiply 50 * km * 2 100 km
Scalar divide 100 * km / 4 25 km

Common Units in Addition/Subtraction

When adding quantities with different units (like km + m above), the library picks a common unit for the result - typically the more fundamental unit:

quantity result = 1 * km + 2000 * m;  // Result: 3000 m

Info

When mixing different unit systems (e.g., SI km + imperial mi), the library finds a common unit that may differ from both inputs. You'll often need to explicitly convert to your preferred unit with .in(unit). Learn more about this in Generic Interfaces.

Challenges

Try these in the editor above:

  1. Calculate fuel efficiency: quantity fuel = 50 * l; then total_distance / fuel (km/L)
  2. Multiple operations: Try (trip1 + trip2) / (time * 2)
  3. Acceleration: quantity velocity = 30 * m / s; quantity duration = 5 * s; then velocity / duration
  4. See compile errors: Try trip1 + time or trip1 < time - observe the compiler's error message! (We'll explore this compile-time safety in depth in Compile-Time Protection)

What You Learned?

✅ Addition/subtraction only work with compatible units
✅ Adding different units (km + m) produces a common unit result
✅ Multiplication/division create new composite quantities
✅ Dimensional analysis happens automatically
✅ Format quantities with std::format for flexible output