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 + mautomatically converted to a common unit (m)
- Notice: Adding
- 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:
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:
- Calculate fuel efficiency:
quantity fuel = 50 * l;thentotal_distance / fuel(km/L) - Multiple operations: Try
(trip1 + trip2) / (time * 2) - Acceleration:
quantity velocity = 30 * m / s; quantity duration = 5 * s;thenvelocity / duration - See compile errors: Try
trip1 + timeortrip1 < 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