docs: "Symbols of scaled units" chapter added + minor updates to scaled and common units chapters

This commit is contained in:
Mateusz Pusz
2024-10-05 18:11:18 +02:00
parent 569f27af8b
commit 21d07a4cf4
2 changed files with 35 additions and 6 deletions

View File

@@ -278,7 +278,8 @@ the library returns a special type that denotes that we are dealing with a commo
an equation: an equation:
```cpp ```cpp
quantity q = 1 * km + 1 * mi; // quantity<common_unit<international::mile, si::kilo_<si::metre>>{}, int> quantity q1 = 1 * km + 1 * mi; // quantity<common_unit<international::mile, si::kilo_<si::metre>>{}, int>
quantity q2 = 1. * rad + 1. * deg; // quantity<common_unit<si::degree, si::radian>, double>{}>
``` ```
!!! note !!! note

View File

@@ -268,25 +268,53 @@ The above prints:
kg⋅m⋅s⁻² kg⋅m⋅s⁻²
``` ```
## Symbols of scaled units
In most cases [scaled units are hidden behind named units](systems_of_units.md#scaled-units).
However, there are a few real-life where a user directly faces a scaled unit. For example:
```cpp
constexpr Unit auto l_per_100km = l / (mag<100> * km);
```
The above is a derived unit of litre divided by a scaled unit of 100 kilometers. As we can
see a scaled unit has a magnitude and a reference unit. To denote the scope of such
a unit, we enclose it in `[...]`. For example, the following:
```cpp
std::cout << 6.7 * l_per_100km << "\n";
```
prints:
```text
6.7 l/[100 km]
```
## Symbols of common units ## Symbols of common units
Some [common units](systems_of_units.md#common-units) expressed with a specialization of the Some [common units](systems_of_units.md#common-units) expressed with a specialization of the
`common_unit` class template need special printing rules for their symbols. As they represent `common_unit` class template need special printing rules for their symbols. As they represent
a minimum set of equivalent common units resulting from the addition or subtraction of multiple a minimum set of equivalent common units resulting from the addition or subtraction of multiple
quantities, we print all of them as a scaled version of the source unit. For example the following: quantities, we print all of them as a scaled version of the source unit. For example,
the following:
```cpp ```cpp
std::cout << 1 * km + 1 * mi << "\n"; std::cout << 1 * km + 1 * mi << "\n";
std::cout << 1 * nmi + 1 * mi << "\n"; std::cout << 1 * nmi + 1 * mi << "\n";
std::cout << 1 * km / h + 1 * m / s << "\n"; std::cout << 1 * km / h + 1 * m / s << "\n";
std::cout << 1 * rad + 1 * deg << "\n";
``` ```
will print: prints:
```text ```text
40771 EQUIV{[1/25146] mi, [1/15625] km} 40771 EQUIV{[1/25146 mi], [1/15625 km]}
108167 EQUIV{[1/50292] mi, [1/57875] nmi} 108167 EQUIV{[1/50292 mi], [1/57875 nmi]}
23 EQUIV{[1/5] km/h, [1/18] m/s} 23 EQUIV{[1/5 km/h], [1/18 m/s]}
183.142 EQUIV{[1/𝜋°], [1/180 rad]}
``` ```
Thanks to the above, it might be easier for the user to reason about the magnitude of the resulting Thanks to the above, it might be easier for the user to reason about the magnitude of the resulting