<!DOCTYPE html><htmllang='en'><head><title>[qty.ratio]</title><metacharset='UTF-8'/><linkrel='stylesheet'type='text/css'href='14882.css'/><linkrel='stylesheet'type='text/css'href='https://fonts.googleapis.com/css2?family=Noto+Serif'/><linkrel='stylesheet'type='text/css'href='https://fonts.googleapis.com/css2?family=Noto+Sans'/><linkrel='stylesheet'type='text/css'href='https://fonts.googleapis.com/css2?family=Noto+Sans+Mono'/><linkrel='icon'href='icon.png'/><linkrel='stylesheet'type='text/css'href='expanded.css'title='Normal'/><linkrel='alternate stylesheet'type='text/css'href='colored.css'title='Notes and examples colored'/><linkrel='alternate stylesheet'type='text/css'href='normative-only.css'title='Notes and examples hidden'/></head><body><divclass='wrapper'><h1><aclass='secnum'style='min-width:50pt'>5</a> Quantities and units library <aclass='abbr_ref'href='index.html#quantities'>[quantities]</a></h1><h2><aclass='secnum'style='min-width:65pt'>5.3</a> Utilities <aclass='abbr_ref'href='qty.utils.html#qty.ratio'>[qty.utils]</a></h2><h3><aclass='secnum'style='min-width:80pt'>5.3.2</a> Ratio <aclass='abbr_ref'>[qty.ratio]</a></h3><divclass='texpara'><spanid='lib:ratio,is-integral'><spanid='lib:is-integral,ratio'><spanid='lib:ratio,operator/'><spanid='lib:operator/,ratio'><spanid='lib:ratio,operator+'><spanid='lib:operator+,ratio'><spanid='lib:ratio,operator-'><spanid='lib:operator-,ratio'><spanid='lib:ratio,operator<=>'><spanid='lib:operator<=>,ratio'><spanid='lib:ratio,operator=='><spanid='lib:operator==,ratio'><spanid='lib:ratio'><divclass='marginalizedparent'><aclass='itemDeclLink'href='#lib:ratio'>🔗</a></div><spanclass='codeblock'><spanclass='keyword'>namespace</span> mp_units <spanclass='curlybracket'>{</span>
<spanclass='keyword'>consteval</span><i>ratio</i><spanclass='parenthesis'>(</span>std<spanclass='operator'>::</span>intmax_t n, std<spanclass='operator'>::</span>intmax_t d <spanclass='operator'>=</span><spanclass='literal'>1</span><spanclass='parenthesis'>)</span>;
let <spanclass='texttt'>R<spanclass='parenthesis'>(</span>r<spanclass='parenthesis'>)</span></span> be <spanclass='texttt'>std<spanclass='operator'>​::​</span>ratio<spanclass='anglebracket'><</span>N, D<spanclass='anglebracket'>></span></span>,
where <spanclass='texttt'>N</span> and <spanclass='texttt'>D</span> are the values of <spanclass='texttt'>r<spanclass='operator'>.</span>num</span> and <spanclass='texttt'>r<spanclass='operator'>.</span>den</span><aclass='hidden_link'href='#2.sentence-1'>.</a></div></div></div><divclass='texpara'><divid='lib:ratio,constructor'><divclass='itemdecl'><divclass='marginalizedparent'><aclass='itemDeclLink'href='#lib:ratio,constructor'>🔗</a></div><codeclass='itemdeclcode'><spanclass='keyword'>consteval</span><spanclass='texttt'><i>ratio</i></span><spanclass='parenthesis'>(</span>std<spanclass='operator'>::</span>intmax_t n, std<spanclass='operator'>::</span>intmax_t d <spanclass='operator'>=</span><spanclass='literal'>1</span><spanclass='parenthesis'>)</span>;
</code></div></div></div><divclass='para'id='3'><divclass='marginalizedparent'><aclass='marginalized'href='#3'>3</a></div><divclass='itemdescr'><divclass='sourceLinkParent'><aclass='sourceLink'href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L790'>#</a></div><divclass='texpara'><divid='3.sentence-1'class='sentence'>Let <spanclass='texttt'>N</span> and <spanclass='texttt'>D</span> be the values of <spanclass='texttt'>n</span> and <spanclass='texttt'>d</span><aclass='hidden_link'href='#3.sentence-1'>.</a></div><divid='3.sentence-2'class='sentence'>Let <spanclass='texttt'>R</span> be <spanclass='texttt'>std<spanclass='operator'>​::​</span>ratio<spanclass='anglebracket'><</span>N, D<spanclass='anglebracket'>></span></span><aclass='hidden_link'href='#3.sentence-2'>.</a></div></div></div></div><divclass='para'id='4'><divclass='marginalizedparent'><aclass='marginalized'href='#4'>4</a></div><divclass='itemdescr'><divclass='sourceLinkParent'><aclass='sourceLink'href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L794'>#</a></div><divclass='texpara'><divid='4.sentence-1'class='sentence'><i>Effects</i>: Equivalent to
<spanclass='texttt'>R</span><aclass='hidden_link'href='#4.sentence-1'>.</a></div></div></div></div><divclass='para'id='5'><divclass='marginalizedparent'><aclass='marginalized'href='#5'>5</a></div><divclass='itemdescr'><divclass='sourceLinkParent'><aclass='sourceLink'href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L799'>#</a></div><divclass='texpara'><divid='5.sentence-1'class='sentence'><i>Postconditions</i>: <spanclass='texttt'>num <spanclass='operator'>=</span><spanclass='operator'>=</span> R<spanclass='operator'>​::​</span>num <spanclass='operator'>&</span><spanclass='operator'>&</span> den <spanclass='operator'>=</span><spanclass='operator'>=</span> R<spanclass='operator'>​::​</span>den</span> is <spanclass='texttt'><spanclass='literal'>true</span></span><aclass='hidden_link'href='#5.sentence-1'>.</a></div></div></div></div><divclass='texpara'><divid='lib:ratio,operator*'><divid='lib:operator*,ratio'><divclass='itemdecl'><divclass='marginalizedparent'><aclass='itemDeclLink'href='#lib:operator*,ratio'>🔗</a></div><codeclass='itemdeclcode'><spanclass='keyword'>friend</span><spanclass='keyword'>consteval</span><spanclass='texttt'><i>ratio</i></span><spanclass='keyword'>operator</span><spanclass='operator'>*</span><spanclass='parenthesis'>(</span><spanclass='texttt'><i>ratio</i></span> lhs, <spanclass='texttt'><i>ratio</i></span> rhs<spanclass='parenthesis'>)</span>;
</code></div></div></div></div><divclass='para'id='6'><divclass='marginalizedparent'><aclass='marginalized'href='#6'>6</a></div><divclass='itemdescr'><divclass='sourceLinkParent'><aclass='sourceLink'href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L810'>#</a></div><divclass='texpara'><divid='6.sentence-1'class='sentence'>Let <spanclass='texttt'>Res</span> be <spanclass='texttt'>std<spanclass='operator'>​::​</span>ratio_<spanclass='shy'></span>multiply<spanclass='anglebracket'><</span>R<spanclass='parenthesis'>(</span>lhs<spanclass='parenthesis'>)</span>, R<spanclass='parenthesis'>(</span>rhs<spanclass='parenthesis'>)</span><spanclass='anglebracket'>></span></span><aclass='hidden_link'href='#6.sentence-1'>.</a></div></div></div></div><divclass='para'id='7'><divclass='marginalizedparent'><aclass='marginalized'href='#7'>7</a></div><divclass='itemdescr'><divclass='sourceLinkParent'><aclass='sourceLink'href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L813'>#</a></div><divclass='texpara'><divid='7.sentence-1'class='sentence'><i>Effects</i>: Equivalent to:
</code></div></div></div></div><divclass='para'id='8'><divclass='marginalizedparent'><aclass='marginalized'href='#8'>8</a></div><divclass='itemdescr'><divclass='sourceLinkParent'><aclass='sourceLink'href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L825'>#</a></div><divclass='texpara'><divid='8.sentence-1'class='sentence'>Let <spanclass='texttt'>Res</span> be equal to
</span></div></div></div></div><divclass='para'id='9'><divclass='marginalizedparent'><aclass='marginalized'href='#9'>9</a></div><divclass='itemdescr'><divclass='sourceLinkParent'><aclass='sourceLink'href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L832'>#</a></div><divclass='texpara'><divid='9.sentence-1'class='sentence'><i>Effects</i>: Equivalent to: