forked from mpusz/mp-units
83 lines
38 KiB
HTML
83 lines
38 KiB
HTML
<!DOCTYPE html><html lang='en'><head><title>[qty.unit.mag]</title><meta charset='UTF-8'/><link rel='stylesheet' type='text/css' href='14882.css'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Serif'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Sans'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Sans+Mono'/><link rel='icon' href='icon.png'/><link rel='stylesheet' type='text/css' href='expanded.css' title='Normal'/><link rel='alternate stylesheet' type='text/css' href='colored.css' title='Notes and examples colored'/><link rel='alternate stylesheet' type='text/css' href='normative-only.css' title='Notes and examples hidden'/></head><body><div class='wrapper'><h1 ><a class='secnum' style='min-width:50pt'>5</a> Quantities and units library <a class='abbr_ref' href='index.html#quantities'>[quantities]</a></h1><h2 ><a class='secnum' style='min-width:65pt'>5.4</a> Reference <a class='abbr_ref' href='qty.ref.html#qty.unit.mag'>[qty.ref]</a></h2><h3 ><a class='secnum' style='min-width:80pt'>5.4.4</a> Unit <a class='abbr_ref' href='qty.unit.html#mag'>[qty.unit]</a></h3><h4 ><a class='secnum' style='min-width:95pt'>5.4.4.2</a> Magnitude <a class='abbr_ref'>[qty.unit.mag]</a></h4><div id='general' class='section'><h4 ><a class='secnum' href='#general' style='min-width:110pt'>5.4.4.2.1</a> General <a class='abbr_ref' href='qty.unit.mag.general.html'>[qty.unit.mag.general]</a></h4><div class='para' id='general-1'><div class='marginalizedparent'><a class='marginalized' href='#general-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2282'>#</a></div><div class='texpara'><div id='general-1.sentence-1' class='sentence'>Subclause [qty.<span class='shy'></span>unit.<span class='shy'></span>mag] specifies the components
|
|
used to represent the numerical value (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-29">IEC 60050, 112-01-29</a>) of a unit
|
|
with support for powers (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-02-08">IEC 60050, 102-02-08</a>) of real numbers (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-02-05">IEC 60050, 102-02-05</a>)<a class='hidden_link' href='#general-1.sentence-1'>.</a></div></div></div></div><div id='concepts' class='section'><h4 ><a class='secnum' href='#concepts' style='min-width:110pt'>5.4.4.2.2</a> Concepts <a class='abbr_ref' href='qty.unit.mag.concepts.html'>[qty.unit.mag.concepts]</a></h4><div class='texpara'><div class='itemdecl' id='concepts-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#concepts-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
|
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:MagConstant' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='concept:MagConstant'><span id='lib:MagConstant'><span class='texttt'>MagConstant</span></span></span></a> <span class='operator'>=</span> <a class='index' id='conceptref:SymbolicConstant'></a><span class='texttt'><i >SymbolicConstant</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'><</span>T, mag_constant<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
|
|
|
|
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
|
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='concept:UnitMagnitude'><span id='lib:UnitMagnitude'><span class='texttt'>UnitMagnitude</span></span></span></a> <span class='operator'>=</span> <span class='parenthesis'>(</span><span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'><</span>T, <span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
|
|
|
|
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
|
<span class='keyword'>concept</span> <span class='texttt'><i >MagArg</i></span><a class='index' id='concept:MagArg'></a> <span class='operator'>=</span> std<span class='operator'>::</span>integral<span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>|</span><span class='operator'>|</span> <a href='#concept:MagConstant' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:MagConstant'><span class='texttt'>MagConstant</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span>; <span class='comment'>// <i >exposition only</i></span>
|
|
</code></div></div></div><div id='types' class='section'><h4 ><a class='secnum' href='#types' style='min-width:110pt'>5.4.4.2.3</a> Types <a class='abbr_ref' href='qty.unit.mag.types.html'>[qty.unit.mag.types]</a></h4><div class='texpara'><span id='lib:mag_constant'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mag_constant'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
|
|
|
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <span class='keyword'>long</span> <span class='keyword'>double</span> Value<span class='anglebracket'>></span>
|
|
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Value <span class='anglebracket'>></span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
|
<span class='keyword'>struct</span> mag_constant <span class='curlybracket'>{</span>
|
|
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
|
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>long</span> <span class='keyword'>double</span> <i >value</i> <span class='operator'>=</span> Value; <span class='comment'>// <i >exposition only</i></span>
|
|
<span class='curlybracket'>}</span>;
|
|
|
|
<span class='curlybracket'>}</span>
|
|
</span></span></div><div class='texpara'><div id='types-sentence-1' class='sentence'>A specialization of <span class='texttt'>mag_<span class='shy'></span>constant</span> represents a real number (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-02-05">IEC 60050, 102-02-05</a>)<a class='hidden_link' href='#types-sentence-1'>.</a></div> <div id='types-sentence-2' class='sentence'><span class='texttt'>Symbol</span> is its symbol, and
|
|
<span class='texttt'>Value</span> is (an approximation of) its value<a class='hidden_link' href='#types-sentence-2'>.</a></div></div><div class='texpara'><span id='lib:unit-magnitude'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unit-magnitude'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
|
|
|
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Ms<span class='anglebracket'>></span>
|
|
<span class='keyword'>struct</span> <i >unit-magnitude</i> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
|
|
<span class='comment'>// <a href='#ops' title='5.4.4.2.4 Operations'>[qty.<span class='shy'></span>unit.<span class='shy'></span>mag.<span class='shy'></span>ops]</a>, operations</span>
|
|
|
|
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> M<span class='anglebracket'>></span>
|
|
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><i >unit-magnitude</i> lhs, M rhs<span class='parenthesis'>)</span>;
|
|
|
|
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span><i >unit-magnitude</i> lhs, <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude__'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> rhs<span class='parenthesis'>)</span>;
|
|
|
|
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude___'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> Rhs<span class='anglebracket'>></span>
|
|
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><i >unit-magnitude</i>, Rhs<span class='parenthesis'>)</span>;
|
|
|
|
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>int</span> Num, <span class='keyword'>int</span> Den <span class='operator'>=</span> <span class='literal'>1</span><span class='anglebracket'>></span>
|
|
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <i >pow</i><span class='parenthesis'>(</span><i >unit-magnitude</i><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
|
|
|
<span class='comment'>// <a href='#utils' title='5.4.4.2.5 Utilities'>[qty.<span class='shy'></span>unit.<span class='shy'></span>mag.<span class='shy'></span>utils]</a>, utilities</span>
|
|
|
|
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <i >is-positive-integral-power</i><span class='parenthesis'>(</span><i >unit-magnitude</i><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
|
|
|
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Ms2<span class='anglebracket'>></span>
|
|
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <i >common-magnitude</i><span class='parenthesis'>(</span><i >unit-magnitude</i>, <span class='comment'>// <i >exposition only</i></span>
|
|
<i >unit-magnitude</i><span class='anglebracket'><</span>Ms2<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span><span class='parenthesis'>)</span>;
|
|
<span class='curlybracket'>}</span>;
|
|
|
|
<span class='curlybracket'>}</span>
|
|
</span></span></div><div class='para' id='types-1'><div class='marginalizedparent'><a class='marginalized' href='#types-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2351'>#</a></div><div class='texpara'><div id='types-1.sentence-1' class='sentence'>A specialization of <span class='texttt'><i >unit-magnitude</i></span>
|
|
represents the product of its template arguments<a class='hidden_link' href='#types-1.sentence-1'>.</a></div></div></div><div class='para' id='types-2'><div class='marginalizedparent'><a class='marginalized' href='#types-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2355'>#</a></div><div class='texpara'><div id='types-2.sentence-1' class='sentence'>For the purposes of specifying the implementation-defined limits,
|
|
let the representation of the terms of <span class='texttt'><i >unit-magnitude</i></span> be the structure
|
|
<span class='codeblock'><span class='keyword'>struct</span> <span class='curlybracket'>{</span>
|
|
<i >ratio</i> exp;
|
|
<i >base-type</i> base;
|
|
<span class='curlybracket'>}</span>;
|
|
</span>
|
|
representing the number <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">base</span></span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.513em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.519em;">exp</span></span></span></span></span></span></span></span></span>,
|
|
where <span class='texttt'><i >base-type</i></span> is a model of <a href='#concept:MagArg' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:MagArg'><span class='texttt'><i >MagArg</i></span></span></a><a class='hidden_link' href='#types-2.sentence-1'>.</a></div> <ul class='itemize'><li id='types-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#types-2.1'>(2.1)</a></div><div class='texpara'><div id='types-2.1.sentence-1' class='sentence'>There is a single term for each <span class='texttt'><i >base-type</i></span><a class='hidden_link' href='#types-2.1.sentence-1'>.</a></div></div></li><li id='types-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#types-2.2'>(2.2)</a></div><div class='texpara'><div id='types-2.2.sentence-1' class='sentence'><span class='texttt'>exp<span class='operator'>.</span>num</span> is not expanded into base<a class='hidden_link' href='#types-2.2.sentence-1'>.</a></div> <div id='types-note-1' class='note'><div class='texpara'>[<i>Note <a href='#types-note-1'>1</a></i>: <div id='types-2.2.sentence-2' class='sentence'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">2</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.591em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">3</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">8</span></span></span></span></span> is not permitted<a class='hidden_link' href='#types-2.2.sentence-2'>.</a></div> — <i>end note</i>]</div></div></div></li><li id='types-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#types-2.3'>(2.3)</a></div><div class='texpara'><div id='types-2.3.sentence-1' class='sentence'><span class='texttt'>exp<span class='operator'>.</span>den</span> can reduce the base<a class='hidden_link' href='#types-2.3.sentence-1'>.</a></div> <div id='types-note-2' class='note'><div class='texpara'>[<i>Note <a href='#types-note-2'>2</a></i>: <div id='types-2.3.sentence-2' class='sentence'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">4</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.607em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">/</span></span></span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">2</span></span></span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">2</span></span></span></span></span> is permitted<a class='hidden_link' href='#types-2.3.sentence-2'>.</a></div> — <i>end note</i>]</div></div></div></li><li id='types-2.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#types-2.4'>(2.4)</a></div><div class='texpara'><div id='types-2.4.sentence-1' class='sentence'>If the result of an operation on <span class='texttt'>std<span class='operator'>​::​</span>intmax_<span class='shy'></span>t</span> values is undefined,
|
|
the behavior is
|
|
<a class='index' id=':behavior_of_unit-magnitude_operations_that_do_not_fit_in_a_std::intmax_t'></a>implementation-defined<a class='hidden_link' href='#types-2.4.sentence-1'>.</a></div></div></li></ul></div></div></div><div id='ops' class='section'><h4 ><a class='secnum' href='#ops' style='min-width:110pt'>5.4.4.2.4</a> Operations <a class='abbr_ref' href='qty.unit.mag.ops.html'>[qty.unit.mag.ops]</a></h4><div class='texpara'><div id='lib:UnitMagnitude,operator*'><div id='lib:operator*,UnitMagnitude'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,UnitMagnitude'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude____'><span class='texttt'>UnitMagnitude</span></span></a> M<span class='anglebracket'>></span>
|
|
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_____'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span> lhs, M rhs<span class='parenthesis'>)</span>;
|
|
</code></div></div></div></div><div class='para' id='ops-1'><div class='marginalizedparent'><a class='marginalized' href='#ops-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2394'>#</a></div><div class='texpara'><div id='ops-1.sentence-1' class='sentence'><i >Returns</i>: <ul class='itemize'><li id='ops-1.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#ops-1.1'>(1.1)</a></div><div class='texpara'><div id='ops-1.1.sentence-1' class='sentence'>If <span class='texttt'><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>Ms<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0</span></span> is <span class='texttt'><span class='literal'>true</span></span>, returns <span class='texttt'>rhs</span><a class='hidden_link' href='#ops-1.1.sentence-1'>.</a></div></div></li><li id='ops-1.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#ops-1.2'>(1.2)</a></div><div class='texpara'><div id='ops-1.2.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>std<span class='operator'>​::​</span>is_<span class='shy'></span>same_<span class='shy'></span>v<span class='anglebracket'><</span>M, <span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'><</span><span class='anglebracket'>></span><span class='anglebracket'>></span></span>, returns <span class='texttt'>lhs</span><a class='hidden_link' href='#ops-1.2.sentence-1'>.</a></div></div></li><li id='ops-1.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#ops-1.3'>(1.3)</a></div><div class='texpara'><div id='ops-1.3.sentence-1' class='sentence'>Otherwise, returns an unspecified value equal to <span class='math'><span class='texttt'>lhs</span> ×<span class='texttt'>rhs</span></span><a class='hidden_link' href='#ops-1.3.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='texpara'><div id='lib:UnitMagnitude,operator/'><div id='lib:operator/,UnitMagnitude'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator/,UnitMagnitude'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span> lhs, <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude______'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> rhs<span class='parenthesis'>)</span>;
|
|
</code></div></div></div></div><div class='para' id='ops-2'><div class='marginalizedparent'><a class='marginalized' href='#ops-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2412'>#</a></div><div class='texpara'><div id='ops-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>lhs <span class='operator'>*</span> <span class='texttt'><i >pow</i></span><span class='anglebracket'><</span><span class='operator'>-</span><span class='literal'>1</span><span class='anglebracket'>></span><span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span></span><a class='hidden_link' href='#ops-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:UnitMagnitude,operator=='><div id='lib:operator==,UnitMagnitude'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,UnitMagnitude'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_______'><span class='texttt'>UnitMagnitude</span></span></a> Rhs<span class='anglebracket'>></span>
|
|
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span>, Rhs<span class='parenthesis'>)</span>;
|
|
</code></div></div></div></div><div class='para' id='ops-3'><div class='marginalizedparent'><a class='marginalized' href='#ops-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2424'>#</a></div><div class='texpara'><div id='ops-3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>​::​</span>is_<span class='shy'></span>same_<span class='shy'></span>v<span class='anglebracket'><</span><span class='texttt'><i >unit-magnitude</i></span>, Rhs<span class='anglebracket'>></span></span><a class='hidden_link' href='#ops-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:pow,UnitMagnitude'><div id='lib:UnitMagnitude,pow'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:UnitMagnitude,pow'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>int</span> Num, <span class='keyword'>int</span> Den <span class='operator'>=</span> <span class='literal'>1</span><span class='anglebracket'>></span>
|
|
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >pow</i></span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span> base<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
|
</code></div></div></div></div><div class='para' id='ops-4'><div class='marginalizedparent'><a class='marginalized' href='#ops-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2436'>#</a></div><div class='texpara'><div id='ops-4.sentence-1' class='sentence'><i >Returns</i>: <ul class='itemize'><li id='ops-4.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#ops-4.1'>(4.1)</a></div><div class='texpara'><div id='ops-4.1.sentence-1' class='sentence'>If <span class='texttt'>Num <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0</span></span> is <span class='texttt'><span class='literal'>true</span></span>, returns <span class='texttt'><span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'><</span><span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span></span><a class='hidden_link' href='#ops-4.1.sentence-1'>.</a></div></div></li><li id='ops-4.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#ops-4.2'>(4.2)</a></div><div class='texpara'><div id='ops-4.2.sentence-1' class='sentence'>Otherwise, returns an unspecified value equal to <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">base</span></span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.513em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">Num</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">/</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">Den</span></span></span></span></span></span></span></span></span></span></span><a class='hidden_link' href='#ops-4.2.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='texpara'><div id='lib:mag'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mag'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:MagArg_'></a><span class='texttt'><i >MagArg</i></span> <span class='keyword'>auto</span> V<span class='anglebracket'>></span>
|
|
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> mag <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
|
|
</code></div></div></div><div class='para' id='ops-5'><div class='marginalizedparent'><a class='marginalized' href='#ops-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2453'>#</a></div><div class='texpara'><div id='ops-5.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>V</span> is greater than <span class='math'>0</span><a class='hidden_link' href='#ops-5.sentence-1'>.</a></div></div></div></div><div class='para' id='ops-6'><div class='marginalizedparent'><a class='marginalized' href='#ops-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2457'>#</a></div><div class='texpara'><div id='ops-6.sentence-1' class='sentence'><i >Effects</i>: If <span class='texttt'><a href='#concept:MagConstant' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:MagConstant_'><span class='texttt'>MagConstant</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>V<span class='parenthesis'>)</span><span class='anglebracket'>></span></span> is satisfied,
|
|
initializes <span class='texttt'>mag</span> with <span class='texttt'><span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'><</span>V<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span></span><a class='hidden_link' href='#ops-6.sentence-1'>.</a></div> <div id='ops-6.sentence-2' class='sentence'>Otherwise, initializes <span class='texttt'>mag</span> with
|
|
an unspecified value equal to <span class='texttt'>V</span><a class='hidden_link' href='#ops-6.sentence-2'>.</a></div></div></div></div><div class='texpara'><div id='lib:mag_ratio'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mag_ratio'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>intmax_t N, std<span class='operator'>::</span>intmax_t D<span class='anglebracket'>></span>
|
|
<span class='keyword'>requires</span><span class='parenthesis'>(</span>N <span class='anglebracket'>></span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
|
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> mag_ratio <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
|
|
</code></div></div></div><div class='para' id='ops-7'><div class='marginalizedparent'><a class='marginalized' href='#ops-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2473'>#</a></div><div class='texpara'><div id='ops-7.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>mag_<span class='shy'></span>ratio</span> with
|
|
an unspecified value equal to <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">N</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">/</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.225em;">D</span></span></span></span></span></span></span><a class='hidden_link' href='#ops-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:mag_power'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mag_power'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:MagArg__'></a><span class='texttt'><i >MagArg</i></span> <span class='keyword'>auto</span> Base, <span class='keyword'>int</span> Num, <span class='keyword'>int</span> Den <span class='operator'>=</span> <span class='literal'>1</span><span class='anglebracket'>></span>
|
|
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude__________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> mag_power <span class='operator'>=</span> <span class='texttt'><i >pow</i></span><span class='anglebracket'><</span>Num, Den<span class='anglebracket'>></span><span class='parenthesis'>(</span>mag<span class='anglebracket'><</span>Base<span class='anglebracket'>></span><span class='parenthesis'>)</span>;
|
|
</code></div></div></div><div class='para' id='ops-8'><div class='marginalizedparent'><a class='marginalized' href='#ops-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2486'>#</a></div><div class='texpara'><div id='ops-8.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>Base</span> is greater than <span class='math'>0</span><a class='hidden_link' href='#ops-8.sentence-1'>.</a></div></div></div></div></div><div id='utils' class='section'><h4 ><a class='secnum' href='#utils' style='min-width:110pt'>5.4.4.2.5</a> Utilities <a class='abbr_ref' href='qty.unit.mag.utils.html'>[qty.unit.mag.utils]</a></h4><div class='texpara'><div id='lib:is-positive-integral-power,UnitMagnitude'><div id='lib:UnitMagnitude,is-positive-integral-power'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:UnitMagnitude,is-positive-integral-power'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='texttt'><i >is-positive-integral-power</i></span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span> x<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
|
</code></div></div></div></div><div class='para' id='utils-1'><div class='marginalizedparent'><a class='marginalized' href='#utils-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2499'>#</a></div><div class='texpara'><div id='utils-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='literal'>false</span></span> if <span class='texttt'>x</span> has a negative or rational exponent, and
|
|
<span class='texttt'><span class='literal'>true</span></span> otherwise<a class='hidden_link' href='#utils-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:common-magnitude,UnitMagnitude'><div id='lib:UnitMagnitude,common-magnitude'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:UnitMagnitude,common-magnitude'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Ms2<span class='anglebracket'>></span>
|
|
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >common-magnitude</i></span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span>, <span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'><</span>Ms2<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
|
</code></div></div></div></div><div class='para' id='utils-2'><div class='marginalizedparent'><a class='marginalized' href='#utils-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2512'>#</a></div><div class='texpara'><div id='utils-2.sentence-1' class='sentence'><i >Returns</i>: The largest magnitude <span class='texttt'>C</span>
|
|
such that each input magnitude is expressible
|
|
by only positive powers relative to <span class='texttt'>C</span><a class='hidden_link' href='#utils-2.sentence-1'>.</a></div></div></div></div></div></div></body></html> |