<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<meta name="author" content="Hana+Dus%C3%ADkov%C3%A1">
	<meta name="description" content="">
	<meta name="generator" content="hatemplate/v2">
	<title>P3791R0: constexpr (deterministic) random</title>
	
	<link rel="preconnect" href="https://fonts.googleapis.com">
	<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
	
	
<!-- highlight.min.js -->
<script>
/*!
  Highlight.js v11.9.0 (git: b7ec4bfafc)
  (c) 2006-2024 undefined and other contributors
  License: BSD-3-Clause
 */
var hljs=function(){"use strict";function e(t){
return t instanceof Map?t.clear=t.delete=t.set=()=>{
throw Error("map is read-only")}:t instanceof Set&&(t.add=t.clear=t.delete=()=>{
throw Error("set is read-only")
}),Object.freeze(t),Object.getOwnPropertyNames(t).forEach((n=>{
const i=t[n],s=typeof i;"object"!==s&&"function"!==s||Object.isFrozen(i)||e(i)
})),t}class t{constructor(e){
void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}
ignoreMatch(){this.isMatchIgnored=!0}}function n(e){
return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")
}function i(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t]
;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}const s=e=>!!e.scope
;class o{constructor(e,t){
this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){
this.buffer+=n(e)}openNode(e){if(!s(e))return;const t=((e,{prefix:t})=>{
if(e.startsWith("language:"))return e.replace("language:","language-")
;if(e.includes(".")){const n=e.split(".")
;return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ")
}return`${t}${e}`})(e.scope,{prefix:this.classPrefix});this.span(t)}
closeNode(e){s(e)&&(this.buffer+="</span>")}value(){return this.buffer}span(e){
this.buffer+=`<span class="${e}">`}}const r=(e={})=>{const t={children:[]}
;return Object.assign(t,e),t};class a{constructor(){
this.rootNode=r(),this.stack=[this.rootNode]}get top(){
return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){
this.top.children.push(e)}openNode(e){const t=r({scope:e})
;this.add(t),this.stack.push(t)}closeNode(){
if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){
for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}
walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){
return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),
t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){
"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{
a._collapse(e)})))}}class c extends a{constructor(e){super(),this.options=e}
addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){
this.closeNode()}__addSublanguage(e,t){const n=e.root
;t&&(n.scope="language:"+t),this.add(n)}toHTML(){
return new o(this,this.options).value()}finalize(){
return this.closeAllNodes(),!0}}function l(e){
return e?"string"==typeof e?e:e.source:null}function g(e){return h("(?=",e,")")}
function u(e){return h("(?:",e,")*")}function d(e){return h("(?:",e,")?")}
function h(...e){return e.map((e=>l(e))).join("")}function f(...e){const t=(e=>{
const t=e[e.length-1]
;return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}
})(e);return"("+(t.capture?"":"?:")+e.map((e=>l(e))).join("|")+")"}
function p(e){return RegExp(e.toString()+"|").exec("").length-1}
const b=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./
;function m(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n
;let i=l(e),s="";for(;i.length>0;){const e=b.exec(i);if(!e){s+=i;break}
s+=i.substring(0,e.index),
i=i.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?s+="\\"+(Number(e[1])+t):(s+=e[0],
"("===e[0]&&n++)}return s})).map((e=>`(${e})`)).join(t)}
const E="[a-zA-Z]\\w*",x="[a-zA-Z_]\\w*",w="\\b\\d+(\\.\\d+)?",y="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",_="\\b(0b[01]+)",O={
begin:"\\\\[\\s\\S]",relevance:0},v={scope:"string",begin:"'",end:"'",
illegal:"\\n",contains:[O]},k={scope:"string",begin:'"',end:'"',illegal:"\\n",
contains:[O]},N=(e,t,n={})=>{const s=i({scope:"comment",begin:e,end:t,
contains:[]},n);s.contains.push({scope:"doctag",
begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0})
;const o=f("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/)
;return s.contains.push({begin:h(/[ ]+/,"(",o,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),s
},S=N("//","$"),M=N("/\\*","\\*/"),R=N("#","$");var j=Object.freeze({
__proto__:null,APOS_STRING_MODE:v,BACKSLASH_ESCAPE:O,BINARY_NUMBER_MODE:{
scope:"number",begin:_,relevance:0},BINARY_NUMBER_RE:_,COMMENT:N,
C_BLOCK_COMMENT_MODE:M,C_LINE_COMMENT_MODE:S,C_NUMBER_MODE:{scope:"number",
begin:y,relevance:0},C_NUMBER_RE:y,END_SAME_AS_BEGIN:e=>Object.assign(e,{
"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{
t.data._beginMatch!==e[1]&&t.ignoreMatch()}}),HASH_COMMENT_MODE:R,IDENT_RE:E,
MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+x,relevance:0},
NUMBER_MODE:{scope:"number",begin:w,relevance:0},NUMBER_RE:w,
PHRASAL_WORDS_MODE:{
begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/
},QUOTE_STRING_MODE:k,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/,
end:/\/[gimuy]*/,contains:[O,{begin:/\[/,end:/\]/,relevance:0,contains:[O]}]},
RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",
SHEBANG:(e={})=>{const t=/^#![ ]*\//
;return e.binary&&(e.begin=h(t,/.*\b/,e.binary,/\b.*/)),i({scope:"meta",begin:t,
end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},
TITLE_MODE:{scope:"title",begin:E,relevance:0},UNDERSCORE_IDENT_RE:x,
UNDERSCORE_TITLE_MODE:{scope:"title",begin:x,relevance:0}});function A(e,t){
"."===e.input[e.index-1]&&t.ignoreMatch()}function I(e,t){
void 0!==e.className&&(e.scope=e.className,delete e.className)}function T(e,t){
t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",
e.__beforeBegin=A,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,
void 0===e.relevance&&(e.relevance=0))}function L(e,t){
Array.isArray(e.illegal)&&(e.illegal=f(...e.illegal))}function B(e,t){
if(e.match){
if(e.begin||e.end)throw Error("begin & end are not supported with match")
;e.begin=e.match,delete e.match}}function P(e,t){
void 0===e.relevance&&(e.relevance=1)}const D=(e,t)=>{if(!e.beforeMatch)return
;if(e.starts)throw Error("beforeMatch cannot be used with starts")
;const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t]
})),e.keywords=n.keywords,e.begin=h(n.beforeMatch,g(n.begin)),e.starts={
relevance:0,contains:[Object.assign(n,{endsParent:!0})]
},e.relevance=0,delete n.beforeMatch
},H=["of","and","for","in","not","or","if","then","parent","list","value"],C="keyword"
;function $(e,t,n=C){const i=Object.create(null)
;return"string"==typeof e?s(n,e.split(" ")):Array.isArray(e)?s(n,e):Object.keys(e).forEach((n=>{
Object.assign(i,$(e[n],t,n))})),i;function s(e,n){
t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split("|")
;i[n[0]]=[e,U(n[0],n[1])]}))}}function U(e,t){
return t?Number(t):(e=>H.includes(e.toLowerCase()))(e)?0:1}const z={},W=e=>{
console.error(e)},X=(e,...t)=>{console.log("WARN: "+e,...t)},G=(e,t)=>{
z[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),z[`${e}/${t}`]=!0)
},K=Error();function F(e,t,{key:n}){let i=0;const s=e[n],o={},r={}
;for(let e=1;e<=t.length;e++)r[e+i]=s[e],o[e+i]=!0,i+=p(t[e-1])
;e[n]=r,e[n]._emit=o,e[n]._multi=!0}function Z(e){(e=>{
e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,
delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={
_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope
}),(e=>{if(Array.isArray(e.begin)){
if(e.skip||e.excludeBegin||e.returnBegin)throw W("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),
K
;if("object"!=typeof e.beginScope||null===e.beginScope)throw W("beginScope must be object"),
K;F(e,e.begin,{key:"beginScope"}),e.begin=m(e.begin,{joinWith:""})}})(e),(e=>{
if(Array.isArray(e.end)){
if(e.skip||e.excludeEnd||e.returnEnd)throw W("skip, excludeEnd, returnEnd not compatible with endScope: {}"),
K
;if("object"!=typeof e.endScope||null===e.endScope)throw W("endScope must be object"),
K;F(e,e.end,{key:"endScope"}),e.end=m(e.end,{joinWith:""})}})(e)}function V(e){
function t(t,n){
return RegExp(l(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":""))
}class n{constructor(){
this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}
addRule(e,t){
t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),
this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null)
;const e=this.regexes.map((e=>e[1]));this.matcherRe=t(m(e,{joinWith:"|"
}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex
;const t=this.matcherRe.exec(e);if(!t)return null
;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n]
;return t.splice(0,n),Object.assign(t,i)}}class s{constructor(){
this.rules=[],this.multiRegexes=[],
this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){
if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n
;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),
t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){
return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){
this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){
const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex
;let n=t.exec(e)
;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{
const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}
return n&&(this.regexIndex+=n.position+1,
this.regexIndex===this.count&&this.considerAll()),n}}
if(e.compilerExtensions||(e.compilerExtensions=[]),
e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language.  See documentation.")
;return e.classNameAliases=i(e.classNameAliases||{}),function n(o,r){const a=o
;if(o.isCompiled)return a
;[I,B,Z,D].forEach((e=>e(o,r))),e.compilerExtensions.forEach((e=>e(o,r))),
o.__beforeBegin=null,[T,L,P].forEach((e=>e(o,r))),o.isCompiled=!0;let c=null
;return"object"==typeof o.keywords&&o.keywords.$pattern&&(o.keywords=Object.assign({},o.keywords),
c=o.keywords.$pattern,
delete o.keywords.$pattern),c=c||/\w+/,o.keywords&&(o.keywords=$(o.keywords,e.case_insensitive)),
a.keywordPatternRe=t(c,!0),
r&&(o.begin||(o.begin=/\B|\b/),a.beginRe=t(a.begin),o.end||o.endsWithParent||(o.end=/\B|\b/),
o.end&&(a.endRe=t(a.end)),
a.terminatorEnd=l(a.end)||"",o.endsWithParent&&r.terminatorEnd&&(a.terminatorEnd+=(o.end?"|":"")+r.terminatorEnd)),
o.illegal&&(a.illegalRe=t(o.illegal)),
o.contains||(o.contains=[]),o.contains=[].concat(...o.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>i(e,{
variants:null},t)))),e.cachedVariants?e.cachedVariants:q(e)?i(e,{
starts:e.starts?i(e.starts):null
}):Object.isFrozen(e)?i(e):e))("self"===e?o:e)))),o.contains.forEach((e=>{n(e,a)
})),o.starts&&n(o.starts,r),a.matcher=(e=>{const t=new s
;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"
}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"
}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t})(a),a}(e)}function q(e){
return!!e&&(e.endsWithParent||q(e.starts))}class J extends Error{
constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}}
const Y=n,Q=i,ee=Symbol("nomatch"),te=n=>{
const i=Object.create(null),s=Object.create(null),o=[];let r=!0
;const a="Could not find the language '{}', did you forget to load/include a language module?",l={
disableAutodetect:!0,name:"Plain text",contains:[]};let p={
ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,
languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",
cssSelector:"pre code",languages:null,__emitter:c};function b(e){
return p.noHighlightRe.test(e)}function m(e,t,n){let i="",s=""
;"object"==typeof t?(i=e,
n=t.ignoreIllegals,s=t.language):(G("10.7.0","highlight(lang, code, ...args) has been deprecated."),
G("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),
s=e,i=t),void 0===n&&(n=!0);const o={code:i,language:s};N("before:highlight",o)
;const r=o.result?o.result:E(o.language,o.code,n)
;return r.code=o.code,N("after:highlight",r),r}function E(e,n,s,o){
const c=Object.create(null);function l(){if(!N.keywords)return void M.addText(R)
;let e=0;N.keywordPatternRe.lastIndex=0;let t=N.keywordPatternRe.exec(R),n=""
;for(;t;){n+=R.substring(e,t.index)
;const s=_.case_insensitive?t[0].toLowerCase():t[0],o=(i=s,N.keywords[i]);if(o){
const[e,i]=o
;if(M.addText(n),n="",c[s]=(c[s]||0)+1,c[s]<=7&&(j+=i),e.startsWith("_"))n+=t[0];else{
const n=_.classNameAliases[e]||e;u(t[0],n)}}else n+=t[0]
;e=N.keywordPatternRe.lastIndex,t=N.keywordPatternRe.exec(R)}var i
;n+=R.substring(e),M.addText(n)}function g(){null!=N.subLanguage?(()=>{
if(""===R)return;let e=null;if("string"==typeof N.subLanguage){
if(!i[N.subLanguage])return void M.addText(R)
;e=E(N.subLanguage,R,!0,S[N.subLanguage]),S[N.subLanguage]=e._top
}else e=x(R,N.subLanguage.length?N.subLanguage:null)
;N.relevance>0&&(j+=e.relevance),M.__addSublanguage(e._emitter,e.language)
})():l(),R=""}function u(e,t){
""!==e&&(M.startScope(t),M.addText(e),M.endScope())}function d(e,t){let n=1
;const i=t.length-1;for(;n<=i;){if(!e._emit[n]){n++;continue}
const i=_.classNameAliases[e[n]]||e[n],s=t[n];i?u(s,i):(R=s,l(),R=""),n++}}
function h(e,t){
return e.scope&&"string"==typeof e.scope&&M.openNode(_.classNameAliases[e.scope]||e.scope),
e.beginScope&&(e.beginScope._wrap?(u(R,_.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),
R=""):e.beginScope._multi&&(d(e.beginScope,t),R="")),N=Object.create(e,{parent:{
value:N}}),N}function f(e,n,i){let s=((e,t)=>{const n=e&&e.exec(t)
;return n&&0===n.index})(e.endRe,i);if(s){if(e["on:end"]){const i=new t(e)
;e["on:end"](n,i),i.isMatchIgnored&&(s=!1)}if(s){
for(;e.endsParent&&e.parent;)e=e.parent;return e}}
if(e.endsWithParent)return f(e.parent,n,i)}function b(e){
return 0===N.matcher.regexIndex?(R+=e[0],1):(T=!0,0)}function m(e){
const t=e[0],i=n.substring(e.index),s=f(N,e,i);if(!s)return ee;const o=N
;N.endScope&&N.endScope._wrap?(g(),
u(t,N.endScope._wrap)):N.endScope&&N.endScope._multi?(g(),
d(N.endScope,e)):o.skip?R+=t:(o.returnEnd||o.excludeEnd||(R+=t),
g(),o.excludeEnd&&(R=t));do{
N.scope&&M.closeNode(),N.skip||N.subLanguage||(j+=N.relevance),N=N.parent
}while(N!==s.parent);return s.starts&&h(s.starts,e),o.returnEnd?0:t.length}
let w={};function y(i,o){const a=o&&o[0];if(R+=i,null==a)return g(),0
;if("begin"===w.type&&"end"===o.type&&w.index===o.index&&""===a){
if(R+=n.slice(o.index,o.index+1),!r){const t=Error(`0 width match regex (${e})`)
;throw t.languageName=e,t.badRule=w.rule,t}return 1}
if(w=o,"begin"===o.type)return(e=>{
const n=e[0],i=e.rule,s=new t(i),o=[i.__beforeBegin,i["on:begin"]]
;for(const t of o)if(t&&(t(e,s),s.isMatchIgnored))return b(n)
;return i.skip?R+=n:(i.excludeBegin&&(R+=n),
g(),i.returnBegin||i.excludeBegin||(R=n)),h(i,e),i.returnBegin?0:n.length})(o)
;if("illegal"===o.type&&!s){
const e=Error('Illegal lexeme "'+a+'" for mode "'+(N.scope||"<unnamed>")+'"')
;throw e.mode=N,e}if("end"===o.type){const e=m(o);if(e!==ee)return e}
if("illegal"===o.type&&""===a)return 1
;if(I>1e5&&I>3*o.index)throw Error("potential infinite loop, way more iterations than matches")
;return R+=a,a.length}const _=O(e)
;if(!_)throw W(a.replace("{}",e)),Error('Unknown language: "'+e+'"')
;const v=V(_);let k="",N=o||v;const S={},M=new p.__emitter(p);(()=>{const e=[]
;for(let t=N;t!==_;t=t.parent)t.scope&&e.unshift(t.scope)
;e.forEach((e=>M.openNode(e)))})();let R="",j=0,A=0,I=0,T=!1;try{
if(_.__emitTokens)_.__emitTokens(n,M);else{for(N.matcher.considerAll();;){
I++,T?T=!1:N.matcher.considerAll(),N.matcher.lastIndex=A
;const e=N.matcher.exec(n);if(!e)break;const t=y(n.substring(A,e.index),e)
;A=e.index+t}y(n.substring(A))}return M.finalize(),k=M.toHTML(),{language:e,
value:k,relevance:j,illegal:!1,_emitter:M,_top:N}}catch(t){
if(t.message&&t.message.includes("Illegal"))return{language:e,value:Y(n),
illegal:!0,relevance:0,_illegalBy:{message:t.message,index:A,
context:n.slice(A-100,A+100),mode:t.mode,resultSoFar:k},_emitter:M};if(r)return{
language:e,value:Y(n),illegal:!1,relevance:0,errorRaised:t,_emitter:M,_top:N}
;throw t}}function x(e,t){t=t||p.languages||Object.keys(i);const n=(e=>{
const t={value:Y(e),illegal:!1,relevance:0,_top:l,_emitter:new p.__emitter(p)}
;return t._emitter.addText(e),t})(e),s=t.filter(O).filter(k).map((t=>E(t,e,!1)))
;s.unshift(n);const o=s.sort(((e,t)=>{
if(e.relevance!==t.relevance)return t.relevance-e.relevance
;if(e.language&&t.language){if(O(e.language).supersetOf===t.language)return 1
;if(O(t.language).supersetOf===e.language)return-1}return 0})),[r,a]=o,c=r
;return c.secondBest=a,c}function w(e){let t=null;const n=(e=>{
let t=e.className+" ";t+=e.parentNode?e.parentNode.className:""
;const n=p.languageDetectRe.exec(t);if(n){const t=O(n[1])
;return t||(X(a.replace("{}",n[1])),
X("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}
return t.split(/\s+/).find((e=>b(e)||O(e)))})(e);if(b(n))return
;if(N("before:highlightElement",{el:e,language:n
}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e)
;if(e.children.length>0&&(p.ignoreUnescapedHTML,p.throwUnescapedHTML))throw new J("One of your code blocks includes unescaped HTML.",e.innerHTML)
;t=e;const i=t.textContent,o=n?m(i,{language:n,ignoreIllegals:!0}):x(i)
;e.innerHTML=o.value,e.dataset.highlighted="yes",((e,t,n)=>{const i=t&&s[t]||n
;e.classList.add("hljs"),e.classList.add("language-"+i)
})(e,n,o.language),e.result={language:o.language,re:o.relevance,
relevance:o.relevance},o.secondBest&&(e.secondBest={
language:o.secondBest.language,relevance:o.secondBest.relevance
}),N("after:highlightElement",{el:e,result:o,text:i})}let y=!1;function _(){
"loading"!==document.readyState?document.querySelectorAll(p.cssSelector).forEach(w):y=!0
}function O(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}
function v(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{
s[e.toLowerCase()]=t}))}function k(e){const t=O(e)
;return t&&!t.disableAutodetect}function N(e,t){const n=e;o.forEach((e=>{
e[n]&&e[n](t)}))}
"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{
y&&_()}),!1),Object.assign(n,{highlight:m,highlightAuto:x,highlightAll:_,
highlightElement:w,
highlightBlock:e=>(G("10.7.0","highlightBlock will be removed entirely in v12.0"),
G("10.7.0","Please use highlightElement now."),w(e)),configure:e=>{p=Q(p,e)},
initHighlighting:()=>{
_(),G("10.6.0","initHighlighting() deprecated.  Use highlightAll() now.")},
initHighlightingOnLoad:()=>{
_(),G("10.6.0","initHighlightingOnLoad() deprecated.  Use highlightAll() now.")
},registerLanguage:(e,t)=>{let s=null;try{s=t(n)}catch(t){
if(W("Language definition for '{}' could not be registered.".replace("{}",e)),
!r)throw t;W(t),s=l}
s.name||(s.name=e),i[e]=s,s.rawDefinition=t.bind(null,n),s.aliases&&v(s.aliases,{
languageName:e})},unregisterLanguage:e=>{delete i[e]
;for(const t of Object.keys(s))s[t]===e&&delete s[t]},
listLanguages:()=>Object.keys(i),getLanguage:O,registerAliases:v,
autoDetection:k,inherit:Q,addPlugin:e=>{(e=>{
e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{
e["before:highlightBlock"](Object.assign({block:t.el},t))
}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{
e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),o.push(e)},
removePlugin:e=>{const t=o.indexOf(e);-1!==t&&o.splice(t,1)}}),n.debugMode=()=>{
r=!1},n.safeMode=()=>{r=!0},n.versionString="11.9.0",n.regex={concat:h,
lookahead:g,either:f,optional:d,anyNumberOfTimes:u}
;for(const t in j)"object"==typeof j[t]&&e(j[t]);return Object.assign(n,j),n
},ne=te({});return ne.newInstance=()=>te({}),ne}()
;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);/*! `cpp` grammar compiled for Highlight.js 11.9.0 */
(()=>{var e=(()=>{"use strict";return e=>{const t=e.regex,a=e.COMMENT("//","$",{
contains:[{begin:/\\\n/}]
}),n="decltype\\(auto\\)",r="[a-zA-Z_]\\w*::",i="(?!struct)("+n+"|"+t.optional(r)+"[a-zA-Z_]\\w*"+t.optional("<[^<>]+>")+")",s={
className:"type",begin:"\\b[a-z\\d_]*_t\\b"},c={className:"string",variants:[{
begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{
begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
end:"'",illegal:"."},e.END_SAME_AS_BEGIN({
begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},o={
className:"number",variants:[{
begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"
},{
begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"
}],relevance:0},l={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{
keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"
},contains:[{begin:/\\\n/,relevance:0},e.inherit(c,{className:"string"}),{
className:"string",begin:/<.*?>/},a,e.C_BLOCK_COMMENT_MODE]},u={
className:"title",begin:t.optional(r)+e.IDENT_RE,relevance:0
},d=t.optional(r)+e.IDENT_RE+"\\s*\\(",p={
type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],
keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],
literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],
_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"]
},_={className:"function.dispatch",relevance:0,keywords:{
_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"]
},
begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/))
},m=[_,l,s,a,e.C_BLOCK_COMMENT_MODE,o,c],f={variants:[{begin:/=/,end:/;/},{
begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],
keywords:p,contains:m.concat([{begin:/\(/,end:/\)/,keywords:p,
contains:m.concat(["self"]),relevance:0}]),relevance:0},g={className:"function",
begin:"("+i+"[\\*&\\s]+)+"+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,
keywords:p,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:n,keywords:p,relevance:0},{
begin:d,returnBegin:!0,contains:[u],relevance:0},{begin:/::/,relevance:0},{
begin:/:/,endsWithParent:!0,contains:[c,o]},{relevance:0,match:/,/},{
className:"params",begin:/\(/,end:/\)/,keywords:p,relevance:0,
contains:[a,e.C_BLOCK_COMMENT_MODE,c,o,s,{begin:/\(/,end:/\)/,keywords:p,
relevance:0,contains:["self",a,e.C_BLOCK_COMMENT_MODE,c,o,s]}]
},s,a,e.C_BLOCK_COMMENT_MODE,l]};return{name:"C++",
aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:p,illegal:"</",
classNameAliases:{"function.dispatch":"built_in"},
contains:[].concat(f,g,_,m,[l,{
begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\s*<(?!<)",
end:">",keywords:p,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:p},{
match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],
className:{1:"keyword",3:"title.class"}}])}}})();hljs.registerLanguage("cpp",e)
})();
</script>

<!-- merge-html.js -->
<script>
var mergeHTMLPlugin = (function () {
  'use strict';

  var originalStream;

  /**
   * @param {string} value
   * @returns {string}
   */
  function escapeHTML(value) {
    return value
      .replace(/&/g, '&amp;')
      .replace(/</g, '&lt;')
      .replace(/>/g, '&gt;')
      .replace(/"/g, '&quot;')
      .replace(/'/g, '&#x27;');
  }

  /* plugin itself */

  /** @type {HLJSPlugin} */
  const mergeHTMLPlugin = {
    // preserve the original HTML token stream
    "before:highlightElement": ({ el }) => {
      originalStream = nodeStream(el);
    },
    // merge it afterwards with the highlighted token stream
    "after:highlightElement": ({ el, result, text }) => {
      if (!originalStream.length) return;

      const resultNode = document.createElement('div');
      resultNode.innerHTML = result.value;
      result.value = mergeStreams(originalStream, nodeStream(resultNode), text);
      el.innerHTML = result.value;
    }
  };

  /* Stream merging support functions */

  /**
   * @typedef Event
   * @property {'start'|'stop'} event
   * @property {number} offset
   * @property {Node} node
   */

  /**
   * @param {Node} node
   */
  function tag(node) {
    return node.nodeName.toLowerCase();
  }

  /**
   * @param {Node} node
   */
  function nodeStream(node) {
    /** @type Event[] */
    const result = [];
    (function _nodeStream(node, offset) {
      for (let child = node.firstChild; child; child = child.nextSibling) {
        if (child.nodeType === 3) {
          offset += child.nodeValue.length;
        } else if (child.nodeType === 1) {
          result.push({
            event: 'start',
            offset: offset,
            node: child
          });
          offset = _nodeStream(child, offset);
          // Prevent void elements from having an end tag that would actually
          // double them in the output. There are more void elements in HTML
          // but we list only those realistically expected in code display.
          if (!tag(child).match(/br|hr|img|input/)) {
            result.push({
              event: 'stop',
              offset: offset,
              node: child
            });
          }
        }
      }
      return offset;
    })(node, 0);
    return result;
  }

  /**
   * @param {any} original - the original stream
   * @param {any} highlighted - stream of the highlighted source
   * @param {string} value - the original source itself
   */
  function mergeStreams(original, highlighted, value) {
    let processed = 0;
    let result = '';
    const nodeStack = [];

    function selectStream() {
      if (!original.length || !highlighted.length) {
        return original.length ? original : highlighted;
      }
      if (original[0].offset !== highlighted[0].offset) {
        return (original[0].offset < highlighted[0].offset) ? original : highlighted;
      }

      /*
      To avoid starting the stream just before it should stop the order is
      ensured that original always starts first and closes last:

      if (event1 == 'start' && event2 == 'start')
        return original;
      if (event1 == 'start' && event2 == 'stop')
        return highlighted;
      if (event1 == 'stop' && event2 == 'start')
        return original;
      if (event1 == 'stop' && event2 == 'stop')
        return highlighted;

      ... which is collapsed to:
      */
      return highlighted[0].event === 'start' ? original : highlighted;
    }

    /**
     * @param {Node} node
     */
    function open(node) {
      /** @param {Attr} attr */
      function attributeString(attr) {
        return ' ' + attr.nodeName + '="' + escapeHTML(attr.value) + '"';
      }
      // @ts-ignore
      result += '<' + tag(node) + [].map.call(node.attributes, attributeString).join('') + '>';
    }

    /**
     * @param {Node} node
     */
    function close(node) {
      result += '</' + tag(node) + '>';
    }

    /**
     * @param {Event} event
     */
    function render(event) {
      (event.event === 'start' ? open : close)(event.node);
    }

    while (original.length || highlighted.length) {
      let stream = selectStream();
      result += escapeHTML(value.substring(processed, stream[0].offset));
      processed = stream[0].offset;
      if (stream === original) {
        /*
        On any opening or closing tag of the original markup we first close
        the entire highlighted node stack, then render the original tag along
        with all the following original tags at the same offset and then
        reopen all the tags on the highlighted stack.
        */
        nodeStack.reverse().forEach(close);
        do {
          render(stream.splice(0, 1)[0]);
          stream = selectStream();
        } while (stream === original && stream.length && stream[0].offset === processed);
        nodeStack.reverse().forEach(open);
      } else {
        if (stream[0].event === 'start') {
          nodeStack.push(stream[0].node);
        } else {
          nodeStack.pop();
        }
        render(stream.splice(0, 1)[0]);
      }
    }
    return result + escapeHTML(value.substr(processed));
  }

  return mergeHTMLPlugin;

}());
</script>

<!-- trim-nicely.js -->
<script>
var trimNicely = (function () {
  'use strict';

	// this is code from reveal.js under following license:
	
	// Copyright (C) 2011-2024 Hakim El Hattab, http://hakim.se, and reveal.js contributors
  // 
	// Permission is hereby granted, free of charge, to any person obtaining a copy
	// of this software and associated documentation files (the "Software"), to deal
	// in the Software without restriction, including without limitation the rights
	// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
	// copies of the Software, and to permit persons to whom the Software is
	// furnished to do so, subject to the following conditions:
  // 
	// The above copyright notice and this permission notice shall be included in
	// all copies or substantial portions of the Software.
  // 
	// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
	// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
	// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
	// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
	// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
	// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
	// THE SOFTWARE.

	// Function to perform a better "data-trim" on code snippets
	// Will slice an indentation amount on each line of the snippet (amount based on the line having the lowest indentation length)
	function betterTrim(snippetEl) {
		// Helper functions
		function trimLeft(val) {
			// Adapted from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill
			return val.replace(/^[\s\uFEFF\xA0]+/g, '');
		}
		function trimLineBreaks(input) {
			//console.log(input);
			var lines = input.split("\n");

			// Trim line-breaks from the beginning
			for (var i = 0; i < lines.length; i++) {
				if (lines[i].trim() === '') {
					lines.splice(i--, 1);
				} else break;
			}

			// Trim line-breaks from the end
			for (var i = lines.length-1; i >= 0; i--) {
				if (lines[i].trim() === '') {
					lines.splice(i, 1);
				} else break;
			}

			return lines.join("\n");
		}

		// Main function for betterTrim()
		return (function(snippetEl) {
			var content = trimLineBreaks(snippetEl.innerHTML);
			var lines = content.split("\n");
			// Calculate the minimum amount to remove on each line start of the snippet (can be 0)
			var pad = lines.reduce(function(acc, line) {
				if (line.length > 0 && trimLeft(line).length > 0 && acc > line.length - trimLeft(line).length) {
					return line.length - trimLeft(line).length;
				}
				return acc;
			}, Number.POSITIVE_INFINITY);
			// Slice each line with this amount
			return lines.map(function(line, index) {
				return line.slice(pad);
			})
			.join("\n");
		})(snippetEl);
	}
	

  /** @type {HLJSPlugin} */
  const trimNicely = {
    // preserve the original HTML token stream
    "before:highlightElement": ({ el }) => {
			if (!el.hasAttribute("no-data-trim")) {
				el.innerHTML = betterTrim(el);
			}
			
    },
    // merge it afterwards with the highlighted token stream
    "after:highlightElement": ({ el, result, text }) => {
      //if (!originalStream.length) return;
      //
      //const resultNode = document.createElement('div');
      //resultNode.innerHTML = result.value;
      //result.value = mergeStreams(originalStream, nodeStream(resultNode), text);
      //el.innerHTML = result.value;
    }
  };

  /* Stream merging support functions */

  

  return trimNicely;

}());
</script>

	
<!-- Noto Serif (external font) -->
<link href="https://fonts.googleapis.com/css?family=Noto+Serif" rel="stylesheet" blocking="render"></link>
	
<!-- Noto Sans (external font) -->
<link href="https://fonts.googleapis.com/css?family=Noto+Sans" rel="stylesheet" blocking="render"></link>
	
	
<!-- Fira Code (external font) -->
<link href="https://fonts.googleapis.com/css?family=Fira+Code" rel="stylesheet" blocking="render"></link>
	
<!-- eel-hana.css -->
<style>
.wording  {
    font-family: 'Noto Serif';
    hyphens: auto;
    line-height: 1.5;
    font-size: var(--base-font-size-10);
    padding-left: 3em;
}

.wording div {
    background: inherit;
}

.wording div.wrapper {
    max-width: 20cm;
    margin: auto;
}

.wording div.texpara {
    margin-top: 3pt;
    margin-bottom: 3pt;
}

.wording table div.texpara {
    margin-top: 0;
    margin-bottom: 0;
}

.wording table.enumerate div.texpara {
    margin-top: 3pt;
    margin-bottom: 3pt;
}

.wording ul {
    list-style-type: none;
    padding-left: 9mm;
    margin-top: 0;
    margin-bottom: 0;
}

.wording ol {
    margin-top: 0;
    margin-bottom: 0;
}

.wording a {
    text-decoration: none;
}

.wording a.hidden_link {
    text-decoration: none;
    color: inherit;
}

.wording li {
    margin-top: 3pt;
    margin-bottom: 3pt;
}

.wording h1 {
    line-height: 1;
    margin-top: 10pt;
    margin-bottom: 10pt;
}

.wording h2 {
    line-height: 1;
    font-size: var(--base-font-size-14);
    margin-top: 10pt;
    margin-bottom: 10pt;
}

.wording h2::after {
    content: "";
    clear: both;
    display: table;
}

.wording h3 {
    line-height: 1;
    margin-top: 10pt;
    margin-bottom: 10pt;
}

.wording h3::after {
    content: "";
    clear: both;
    display: table;
}

.wording h4 {
    line-height: 1;
    margin-top: 10pt;
    margin-bottom: 10pt;
}

.wording h4::after {
    content: "";
    clear: both;
    display: table;
}

.wording ul > li:before {
    content: "\2014";
    position: absolute;
    margin-left: -1.5em;
}

.wording .shy:before {
    content: "\00ad";
    /* This is U+00AD SOFT HYPHEN, same as &shy, but we put it in :before
    	to stop it from being included when the text is copied to the clipboard
    	with Firefox, which is especially annoying when copying to a terminal,
    	where the hyphen characters will show up. */
}


.wording .abbr_ref {
    float: right;
}

.wording .folded_abbr_ref {
    float: right;
}

.wording .unfolded_abbr_ref {
    display: none;
}

.wording .secnum {
    display: inline-block;
    min-width: 35pt;
}

.wording .annexnum {
    display: block;
}

.wording div.sourceLinkParent {
    float: right;
}

.wording a.sourceLink {
    position: absolute;
    opacity: 0;
    margin-left: 10pt;
}

.wording a.sourceLink:hover {
    opacity: 1;
}

.wording a.itemDeclLink {
    position: absolute;
    font-size: 75%;
    text-align: right;
    width: 5em;
    opacity: 0;
}

.wording a.itemDeclLink:hover {
    opacity: 1;
}

.wording div.marginalizedparent {
    position: relative;
    left: -18mm;
}

.wording a.marginalized {
    width: 15mm;
    position: absolute;
    font-size: var(--base-font-size-7);
    text-align: right;
}

.wording a.enumerated_item_num {
    display: block;
    margin-top: 3pt;
    margin-bottom: 3pt;
    margin-right: 6pt;
}

.wording div.para {
    margin-bottom: 6pt;
    margin-top: 6pt;
    text-align: justify;
    min-height: 1.2em;
}

.wording div.section {
    text-align: justify;
}

.wording div.sentence {
    display: inline;
}

.wording a.index {
    position: relative;
    float: right;
    right: -1em;
    display: none;
}

.wording a.index:before {
    position: absolute;
    content: "⟵";
    background-color: #C9FBC9;
}


.wording .indexitems {
    margin-left: 2em;
    text-indent: -2em;
}

.wording div.itemdescr {
    margin-left: 12mm;
}

.wording .bnf {
    font-family: 'Noto Sans';
    font-size: var(--base-font-size-10);
    font-style: italic;
    margin-left: 25pt;
    margin-top: 0.5em;
    margin-bottom: 0.5em;
    text-indent: -3em;
    padding-left: 3em;
    line-height: 1.5;
}

.wording div.bnf span.texttt {
    font-family: 'Noto Sans Mono';
    font-style: normal;
}

.wording .rebnf {
    font-family: 'Noto Serif';
    font-style: italic;
    margin-top: 0.5em;
    margin-bottom: 0.5em;
    margin-left: 30pt;
    text-indent: -3em;
    padding-left: 3em;
    line-height: 1.5;
}

.wording .simplebnf {
    font-family: 'Noto Serif';
    font-style: italic;
    font-size: var(--base-font-size-10);
    margin-top: 0.5em;
    margin-bottom: 0.5em;
    margin-left: 30pt;
    line-height: 1.5;
}

.wording span.textnormal {
    font-style: normal;
    font-family: 'Noto Serif';
    font-size: var(--base-font-size-10);
    white-space: normal;
}

.wording .bnf span.textnormal {
    font-style: normal;
    font-family: 'Noto Serif';
    font-size: var(--base-font-size-10);
    white-space: normal;
}

.wording p {
    margin-top: 4pt;
    margin-bottom: 4pt;
}

.wording span.rlap {
    display: inline-block;
    width: 0px;
    text-indent: 0;
}

.wording span.terminal {
    font-family: 'Noto Sans Mono';
    font-style: normal;
    font-size: var(--base-font-size-9);
    white-space: pre-wrap;
}

.wording span.noncxxterminal {
    font-family: 'Noto Sans Mono';
    font-style: normal;
    font-size: var(--base-font-size-9);
}

.wording span.term {
    font-style: italic;
}

.wording span.tcode {
    font-family: 'Noto Sans Mono';
    font-style: normal;
}

.wording span.textbf {
    font-weight: bold;
}

.wording span.textsf {
    font-family: 'Noto Sans';
    font-size: var(--base-font-size-10);
}

.wording div.footnote span.textsf {
    font-family: 'Noto Sans';
    font-size: var(--base-font-size-8);
}

.wording .bnf span.textsf {
    font-family: 'Noto Sans';
    font-size: var(--base-font-size-10);
}

.wording .simplebnf span.textsf {
    font-family: 'Noto Sans';
    font-size: var(--base-font-size-10);
}

.wording .example span.textsf {
    font-family: 'Noto Sans';
    font-size: var(--base-font-size-10);
}

.wording span.textsc {
    font-variant: small-caps;
}

.wording span.nontermdef {
    font-style: italic;
    font-family: 'Noto Sans';
    font-size: var(--base-font-size-10);
}

.wording .rebnf a.nontermdef {
    font-style: italic;
    font-family: 'Noto Serif';
}

.wording span.emph {
    font-style: italic;
}

.wording span.techterm {
    font-style: italic;
}

.wording span.mathit {
    font-style: italic;
}

.wording span.mathsf {
    font-family: 'Noto Sans';
}

.wording span.mathrm {
    font-family: 'Noto Serif';
    font-style: normal;
}

.wording span.textrm {
    font-family: 'Noto Serif';
    font-size: var(--base-font-size-10);
}

.wording span.textsl {
    font-style: italic;
}

.wording span.mathtt {
    font-family: 'Noto Sans Mono';
    font-style: normal;
}

.wording span.mbox {
    font-family: 'Noto Serif';
    font-style: normal;
}

.wording span.ungap {
    display: inline-block;
    width: 2pt;
}

.wording span.texttt {
    font-family: 'Noto Sans Mono';
}

.wording span.textit {
    font-style: italic;
}

.wording div.footnote span.texttt {
    font-family: 'Noto Sans Mono';
}

.wording span.tcode_in_codeblock {
    font-family: 'Noto Sans Mono';
    font-style: normal;
    font-size: var(--base-font-size-9);
}

.wording span.phantom {
    color: white;
}
/* Unfortunately, this way the text is still selectable. Another
	option is display:none, but then we lose the nice layout.
	Todo: find proper solution. */

.wording span.math {
    font-style: normal;
    font-family: 'Noto Serif';
    font-size: var(--base-font-size-10);
}

.wording span.mathblock {
    display: block;
    margin-left: auto;
    margin-right: auto;
    margin-top: 1.2em;
    margin-bottom: 1.2em;
    text-align: center;
}

.wording span.mathalpha {
    font-style: italic;
}

.wording span.synopsis {
    font-weight: bold;
    margin-top: 0.5em;
    display: block;
}

.wording span.definition {
    font-weight: bold;
    display: block;
}

.wording .codeblock {
    font-family: 'Noto Sans Mono';
    margin-left: 1.2em;
    line-height: 1.5;
    font-size: var(--base-font-size-9);
    white-space: pre;
    display: block;
    margin-top: 3pt;
    margin-bottom: 3pt;
		overflow-x: visible;
		overflow-y: default;
}

.wording table .codeblock {
    margin-right: 0;
}

.wording .outputblock {
    margin-left: 1.2em;
    line-height: 1.5;
    font-family: 'Noto Sans Mono';
    font-size: var(--base-font-size-9);
}

.wording code {
    font-family: 'Noto Sans Mono';
    font-style: normal;
}

.wording div.itemdecl {
    margin-top: 2ex;
}

.wording code.itemdeclcode {
    white-space: pre;
    font-family: 'Noto Sans Mono';
    font-size: var(--base-font-size-9);
    display: block;
		overflow-x: visible;
		overflow-y: default;
}

.wording .comment {
    color: green;
    font-style: italic;
    font-family: 'Noto Serif';
    font-size: var(--base-font-size-10);
}

.wording .footnote .comment {
    color: green;
    font-style: italic;
    font-family: 'Noto Serif';
    font-size: var(--base-font-size-8);
}

.wording .example .comment {
    color: green;
    font-style: italic;
    font-family: 'Noto Serif';
    font-size: var(--base-font-size-9);
}

.wording .note .comment {
    color: green;
    font-style: italic;
    font-family: 'Noto Serif';
    font-size: var(--base-font-size-9);
}

.wording span.keyword {
    color: #00607c;
    font-style: normal;
}

.wording span.parenthesis {
    color: #af1915;
}

.wording span.curlybracket {
    color: #af1915;
}

.wording span.squarebracket {
    color: #af1915;
}

.wording span.literal {
    color: #9F6807;
}

.wording span.literalterminal {
    color: #9F6807;
    font-family: 'Noto Sans Mono';
    font-style: normal;
}

.wording span.operator {
    color: #570057;
}

.wording span.anglebracket {
    color: #570057;
}

.wording span.preprocessordirective {
    color: #6F4E37;
}

.wording span.textsuperscript {
    vertical-align: super;
    font-size: smaller;
    line-height: 0;
}

.wording .footnoteref {
    vertical-align: super;
    font-size: smaller;
    line-height: 0;
}

.wording .footnote {
    font-size: var(--base-font-size-8);
}

.wording .footnote .math {
    font-size: var(--base-font-size-8);
}

.wording .footnotenum {
    display: inline-block;
    text-align: right;
    margin-right: 1mm;
    width: 4ch;
}

.wording .footnoteBacklink {
    display: none;
}

.wording .footnoteSeparator {
    background: black;
    margin-top: 5mm;
    height: 1px;
    width: 6cm;
}

.wording div.minipage {
    display: inline-block;
    margin-right: 3em;
}

.wording div.numberedTable {
    text-align: center;
    margin-left: 1em;
    margin-right: 1em;
    margin-bottom: 12pt;
    margin-top: 8pt;
}

.wording div.figure {
    text-align: center;
    margin-left: 2em;
    margin-right: 2em;
    margin-bottom: 12pt;
    margin-top: 3pt;
}

.wording table {
    border: 1px solid black;
    border-collapse: collapse;
    margin-left: auto;
    margin-right: auto;
    margin-top: 7pt;
    text-align: left;
}

.wording td, .wording th {
    padding-left: 8pt;
    padding-right: 8pt;
    vertical-align: top;
}

.wording td.empty {
    padding: 0px;
    padding-left: 1px;
}

.wording td.left {
    text-align: left;
}

.wording td.hidden {
    padding: 0;
    width: 0;
}

.wording td.right {
    text-align: right;
}

.wording td.center {
    text-align: center;
}

.wording td.justify {
    text-align: justify;
}

.wording td.border {
    border-left: 1px solid black;
}

.wording tr.rowsep, .wording td.cline {
    border-top: 1px solid black;
}

.wording tr.capsep {
    border-top: 3px solid black;
    border-top-style: double;
}

.wording th {
    border-bottom: 1px solid black;
}

.wording span.centry {
    font-weight: bold;
}

.wording div.table {
    display: block;
    margin-left: auto;
    margin-right: auto;
    text-align: center;
    width: 90%;
}

.wording span.indented {
    background: inherit;
    display: block;
    margin-left: 2em;
    margin-bottom: 1em;
    margin-top: 1em;
}

.wording span.uppercase {
    text-transform: uppercase;
}

.wording span.ucode {
    font-variant: small-caps;
    text-transform: uppercase;
    font-size: 90%;
}

.wording span.uname {
    font-variant: small-caps;
    text-transform: uppercase;
    font-size: 90%;
}

.wording table.enumerate {
    border: 0;
    margin: 0;
}

.wording table.enumerate td {
    padding: 0;
}

.wording table.enumerate td:first-child {
    width: 1cm;
    text-align: right;
}

@media (prefers-color-scheme: dark) {
    .wording {
        background-color: #171717;
        color: #d0d0d0;
    }

    .wording span.mjx-mstyle {
        color: #d0d0d0 !important
    }

    .wording a.hidden_link {
        text-decoration: none;
        color: inherit;
    }

    .wording span.phantom {
        color: #171717;
    }

    .wording a.index:before {
        color: #d0d0d0;
        background-color: #4b6353;
    }

    .wording .comment {
        color: #35da00;
    }

    .wording .footnote .comment {
        color: #35da00;
    }

    .wording .example .comment {
        color: #35da00;
    }

    .wording .note .comment {
        color: #35da00;
    }

    .wording span.keyword {
        color: #12cabe;
    }

    .wording span.parenthesis {
        color: #ff1515;
    }

    .wording span.curlybracket {
        color: #ff1515;
    }

    .wording span.squarebracket {
        color: #ff1515;
    }

    .wording span.literal {
        color: #dfa837;
    }

    .wording span.literalterminal {
        color: #dfa837;
    }

    .wording span.operator {
        color: #baa6b9;
    }

    .wording span.anglebracket {
        color: #baa6b9;
    }

    .wording span.preprocessordirective {
        color: #b27c58;
    }

    .wording table {
        border-color: #d0d0d0;
    }

    .wording td.border {
        border-color: #d0d0d0;
    }

    .wording td.border {
        border-left-color: #d0d0d0;
    }

    .wording tr.rowsep, td.cline {
        border-top-color: #d0d0d0;
    }

    .wording tr.capsep {
        border-top-color: #d0d0d0;
    }

    .wording th {
        border-bottom-color: #d0d0d0;
    }

    .wording .footnoteSeparator {
        background-color: #d0d0d0;
    }

    .wording text {
        fill: #d0d0d0;
    }

    .wording path {
        stroke: #d0d0d0;
    }

    .wording polygon {
        stroke: #d0d0d0;
        fill: #d0d0d0;
    }

    .wording ellipse {
        stroke: #d0d0d0;
    }

}

.wording .mjx-chtml {
    display: inline-block;
    line-height: 0;
    text-indent: 0;
    text-align: left;
    text-transform: none;
    font-style: normal;
    font-weight: normal;
    font-size: 100%;
    font-size-adjust: none;
    letter-spacing: normal;
    word-wrap: normal;
    word-spacing: normal;
    white-space: nowrap;
    float: none;
    direction: ltr;
    max-width: none;
    max-height: none;
    min-width: 0;
    min-height: 0;
    border: 0;
    margin: 0;
    padding: 1px 0
}

.wording .MJXc-display {
    display: block;
    background: inherit;
    text-align: center;
    margin: 1em 0;
    padding: 0
}

.wording .mjx-chtml[tabindex]:focus, .wording  :focus .mjx-chtml[tabindex] {
    display: inline-table
}

.wording .mjx-full-width {
    text-align: center;
    display: table-cell !important;
    width: 10000em
}

.wording .mjx-math {
    display: inline-block;
    border-collapse: separate;
    border-spacing: 0
}

.wording .mjx-math * {
    display: inline-block;
    -webkit-box-sizing: content-box !important;
    -moz-box-sizing: content-box !important;
    box-sizing: content-box !important;
    text-align: left
}

.wording .mjx-numerator {
    display: block;
    background: inherit;
    text-align: center
}

.wording .mjx-denominator {
    display: block;
    background: inherit;
    text-align: center
}

.wording .MJXc-stacked {
    height: 0;
    position: relative
}

.wording .MJXc-stacked > * {
    position: absolute
}

.wording .MJXc-bevelled > * {
    display: inline-block
}

.wording .mjx-stack {
    display: inline-block
}

.wording .mjx-op {
    display: block;
    background: inherit
}

.wording .mjx-under {
    display: table-cell
}

.wording .mjx-over {
    display: block;
    background: inherit
}

.wording .mjx-over > * {
    padding-left: 0px !important;
    padding-right: 0px !important
}

.wording .mjx-under > * {
    padding-left: 0px !important;
    padding-right: 0px !important
}

.wording .mjx-stack > .mjx-sup {
    display: block;
    background: inherit
}

.wording .mjx-stack > .mjx-sub {
    display: block;
    background: inherit
}

.wording .mjx-prestack > .mjx-presup {
    display: block;
    background: inherit
}

.wording .mjx-prestack > .mjx-presub {
    display: block;
    background: inherit
}

.wording .mjx-delim-h > .mjx-char {
    display: inline-block
}

.wording .mjx-surd {
    vertical-align: top
}

.wording .mjx-mphantom * {
    visibility: hidden
}

.wording .mjx-merror {
    background-color: #FFFF88;
    color: #CC0000;
    border: 1px solid #CC0000;
    padding: 2px 3px;
    font-style: normal;
    font-size: 90%
}

.wording .mjx-annotation-xml {
    line-height: normal
}

.wording .mjx-menclose > svg {
    fill: none;
    stroke: currentColor
}

.wording .mjx-mtr {
    display: table-row
}

.wording .mjx-mlabeledtr {
    display: table-row
}

.wording .mjx-mtd {
    display: table-cell;
    text-align: center
}

.wording .mjx-label {
    display: table-row
}

.wording .mjx-box {
    display: inline-block
}

.wording .mjx-block {
    display: block;
    background: inherit
}

.wording .mjx-span {
    display: inline
}

.wording .mjx-char {
    display: block;
    background: inherit;
    white-space: pre
}

.wording .mjx-itable {
    display: inline-table;
    width: auto
}

.wording .mjx-row {
    display: table-row
}

.wording .mjx-cell {
    display: table-cell
}

.wording .mjx-table {
    display: table;
    width: 100%
}

.wording .mjx-line {
    display: block;
    background: inherit;
    height: 0
}

.wording .mjx-strut {
    width: 0;
    padding-top: 1em
}

.wording .mjx-vsize {
    width: 0
}

.wording .MJXc-space1 {
    margin-left: .167em
}

.wording .MJXc-space2 {
    margin-left: .222em
}

.wording .MJXc-space3 {
    margin-left: .278em
}

.wording .mjx-ex-box-test {
    position: absolute;
		overflow-x: visible;
		overflow-y: default;
    width: 1px;
    height: 60ex
}

.wording .mjx-line-box-test {
    display: table !important
}

.wording .mjx-line-box-test span {
    display: table-cell !important;
    width: 10000em !important;
    min-width: 0;
    max-width: none;
    padding: 0;
    border: 0;
    margin: 0
}

.wording .MJXc-TeX-unknown-R {
    font-family: monospace;
    font-style: normal;
    font-weight: normal
}

.wording .MJXc-TeX-unknown-I {
    font-family: monospace;
    font-style: italic;
    font-weight: normal
}

.wording .MJXc-TeX-unknown-B {
    font-family: monospace;
    font-style: normal;
    font-weight: bold
}

.wording .MJXc-TeX-unknown-BI {
    font-family: monospace;
    font-style: italic;
    font-weight: bold
}

.wording .MJXc-TeX-ams-R {
    font-family: MJXc-TeX-ams-R, MJXc-TeX-ams-Rw
}

.wording .MJXc-TeX-cal-B {
    font-family: MJXc-TeX-cal-B, MJXc-TeX-cal-Bx, MJXc-TeX-cal-Bw
}

.wording .MJXc-TeX-frak-R {
    font-family: MJXc-TeX-frak-R, MJXc-TeX-frak-Rw
}

.wording .MJXc-TeX-frak-B {
    font-family: MJXc-TeX-frak-B, MJXc-TeX-frak-Bx, MJXc-TeX-frak-Bw
}

.wording .MJXc-TeX-math-BI {
    font-family: MJXc-TeX-math-BI, MJXc-TeX-math-BIx, MJXc-TeX-math-BIw
}

.wording .MJXc-TeX-sans-R {
    font-family: 'Noto Sans';
    font-size: var(--base-font-size-10);
}

.wording .MJXc-TeX-sans-B {
    font-family: MJXc-TeX-sans-B, MJXc-TeX-sans-Bx, MJXc-TeX-sans-Bw
}

.wording .MJXc-TeX-sans-I {
    font-family: MJXc-TeX-sans-I, MJXc-TeX-sans-Ix, MJXc-TeX-sans-Iw
}

.wording .MJXc-TeX-script-R {
    font-family: MJXc-TeX-script-R, MJXc-TeX-script-Rw
}

.wording .MJXc-TeX-type-R {
    font-family: 'Noto Sans Mono';
    font-size: var(--base-font-size-10);
}

.wording .MJXc-TeX-cal-R {
    font-family: MJXc-TeX-cal-R, MJXc-TeX-cal-Rw
}

.wording .MJXc-TeX-main-B {
    font-family: MJXc-TeX-main-B, MJXc-TeX-main-Bx, MJXc-TeX-main-Bw
}

.wording .MJXc-TeX-main-I {
    font-style: italic
}

.wording .MJXc-TeX-main-R {
}

.wording .MJXc-TeX-math-I {
    font-style: italic
}

.wording .MJXc-TeX-size1-R {
    font-family: MJXc-TeX-size1-R, MJXc-TeX-size1-Rw
}

.wording .MJXc-TeX-size2-R {
    font-family: MJXc-TeX-size2-R, MJXc-TeX-size2-Rw
}

.wording .MJXc-TeX-size3-R {
    font-family: MJXc-TeX-size3-R, MJXc-TeX-size3-Rw
}

.wording .MJXc-TeX-size4-R {
    font-family: MJXc-TeX-size4-R, MJXc-TeX-size4-Rw
}

.wording .MJXc-TeX-vec-R {
    font-family: MJXc-TeX-vec-R, MJXc-TeX-vec-Rw
}

.wording .MJXc-TeX-vec-B {
    font-family: MJXc-TeX-vec-B, MJXc-TeX-vec-Bx, MJXc-TeX-vec-Bw
}

@font-face {
    font-family: MJXc-TeX-ams-R;
    src: local('MathJax_AMS'), local('MathJax_AMS-Regular')
}

@font-face {
    font-family: MJXc-TeX-ams-Rw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_AMS-Regular.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_AMS-Regular.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_AMS-Regular.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-cal-B;
    src: local('MathJax_Caligraphic Bold'), local('MathJax_Caligraphic-Bold')
}

@font-face {
    font-family: MJXc-TeX-cal-Bx;
    src: local('MathJax_Caligraphic');
    font-weight: bold
}

@font-face {
    font-family: MJXc-TeX-cal-Bw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Caligraphic-Bold.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Caligraphic-Bold.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Caligraphic-Bold.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-frak-R;
    src: local('MathJax_Fraktur'), local('MathJax_Fraktur-Regular')
}

@font-face {
    font-family: MJXc-TeX-frak-Rw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Fraktur-Regular.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Fraktur-Regular.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Fraktur-Regular.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-frak-B;
    src: local('MathJax_Fraktur Bold'), local('MathJax_Fraktur-Bold')
}

@font-face {
    font-family: MJXc-TeX-frak-Bx;
    src: local('MathJax_Fraktur');
    font-weight: bold
}

@font-face {
    font-family: MJXc-TeX-frak-Bw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Fraktur-Bold.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Fraktur-Bold.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Fraktur-Bold.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-math-BI;
    src: local('MathJax_Math BoldItalic'), local('MathJax_Math-BoldItalic')
}

@font-face {
    font-family: MJXc-TeX-math-BIx;
    src: local('MathJax_Math');
    font-weight: bold;
    font-style: italic
}

@font-face {
    font-family: MJXc-TeX-math-BIw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Math-BoldItalic.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Math-BoldItalic.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Math-BoldItalic.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-sans-R;
    src: local('MathJax_SansSerif'), local('MathJax_SansSerif-Regular')
}

@font-face {
    font-family: MJXc-TeX-sans-Rw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_SansSerif-Regular.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Regular.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_SansSerif-Regular.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-sans-B;
    src: local('MathJax_SansSerif Bold'), local('MathJax_SansSerif-Bold')
}

@font-face {
    font-family: MJXc-TeX-sans-Bx;
    src: local('MathJax_SansSerif');
    font-weight: bold
}

@font-face {
    font-family: MJXc-TeX-sans-Bw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_SansSerif-Bold.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Bold.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_SansSerif-Bold.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-sans-I;
    src: local('MathJax_SansSerif Italic'), local('MathJax_SansSerif-Italic')
}

@font-face {
    font-family: MJXc-TeX-sans-Ix;
    src: local('MathJax_SansSerif');
    font-style: italic
}

@font-face {
    font-family: MJXc-TeX-sans-Iw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_SansSerif-Italic.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Italic.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_SansSerif-Italic.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-script-R;
    src: local('MathJax_Script'), local('MathJax_Script-Regular')
}

@font-face {
    font-family: MJXc-TeX-script-Rw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Script-Regular.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Script-Regular.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Script-Regular.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-type-R;
    src: local('MathJax_Typewriter'), local('MathJax_Typewriter-Regular')
}

@font-face {
    font-family: MJXc-TeX-type-Rw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Typewriter-Regular.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Typewriter-Regular.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Typewriter-Regular.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-cal-R;
    src: local('MathJax_Caligraphic'), local('MathJax_Caligraphic-Regular')
}

@font-face {
    font-family: MJXc-TeX-cal-Rw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Caligraphic-Regular.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Caligraphic-Regular.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Caligraphic-Regular.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-main-B;
    src: local('MathJax_Main Bold'), local('MathJax_Main-Bold')
}

@font-face {
    font-family: MJXc-TeX-main-Bx;
    src: local('MathJax_Main');
    font-weight: bold
}

@font-face {
    font-family: MJXc-TeX-main-Bw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Main-Bold.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Main-Bold.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Main-Bold.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-main-I;
    src: local('MathJax_Main Italic'), local('MathJax_Main-Italic')
}

@font-face {
    font-family: MJXc-TeX-main-Ix;
    src: local('MathJax_Main');
    font-style: italic
}

@font-face {
    font-family: MJXc-TeX-main-Iw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Main-Italic.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Main-Italic.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Main-Italic.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-main-R;
    src: local('MathJax_Main'), local('MathJax_Main-Regular')
}

@font-face {
    font-family: MJXc-TeX-main-Rw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Main-Regular.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Main-Regular.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Main-Regular.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-math-I;
    src: local('MathJax_Math Italic'), local('MathJax_Math-Italic')
}

@font-face {
    font-family: MJXc-TeX-math-Ix;
    src: local('MathJax_Math');
    font-style: italic
}

@font-face {
    font-family: MJXc-TeX-math-Iw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Math-Italic.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Math-Italic.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Math-Italic.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-size1-R;
    src: local('MathJax_Size1'), local('MathJax_Size1-Regular')
}

@font-face {
    font-family: MJXc-TeX-size1-Rw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Size1-Regular.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Size1-Regular.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Size1-Regular.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-size2-R;
    src: local('MathJax_Size2'), local('MathJax_Size2-Regular')
}

@font-face {
    font-family: MJXc-TeX-size2-Rw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Size2-Regular.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Size2-Regular.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Size2-Regular.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-size3-R;
    src: local('MathJax_Size3'), local('MathJax_Size3-Regular')
}

@font-face {
    font-family: MJXc-TeX-size3-Rw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Size3-Regular.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Size3-Regular.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Size3-Regular.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-size4-R;
    src: local('MathJax_Size4'), local('MathJax_Size4-Regular')
}

@font-face {
    font-family: MJXc-TeX-size4-Rw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Size4-Regular.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Size4-Regular.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Size4-Regular.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-vec-R;
    src: local('MathJax_Vector'), local('MathJax_Vector-Regular')
}

@font-face {
    font-family: MJXc-TeX-vec-Rw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Vector-Regular.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Vector-Regular.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Vector-Regular.otf') format('opentype')
}

@font-face {
    font-family: MJXc-TeX-vec-B;
    src: local('MathJax_Vector Bold'), local('MathJax_Vector-Bold')
}

@font-face {
    font-family: MJXc-TeX-vec-Bx;
    src: local('MathJax_Vector');
    font-weight: bold
}

@font-face {
    font-family: MJXc-TeX-vec-Bw;
    src /*1*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/eot/MathJax_Vector-Bold.eot');
    src /*2*/: url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/woff/MathJax_Vector-Bold.woff') format('woff'), url('https://cdn.mathjax.org/mathjax/latest/fonts/HTML-CSS/TeX/otf/MathJax_Vector-Bold.otf') format('opentype')
}

.wording div.example {
	display: block;
	margin-top: 5pt;
	margin-bottom: 5pt;
	font-size: var(--base-font-size-11);
}

.wording div.note {
	display: block;
	margin-top: 5pt;
	margin-bottom: 5pt;
	font-size: var(--base-font-size-11);
}

.wording div.example {
	display: block;
	margin-top: 5pt;
	margin-bottom: 5pt;
	font-size: var(--base-font-size-9);
}

.wording div.note {
	display: block;
	margin-top: 5pt;
	margin-bottom: 5pt;
	font-size: var(--base-font-size-9);
}

.wording div.note .texttt { font-size: var(--base-font-size-9); }
.wording div.example .texttt { font-size: var(--base-font-size-9); }

.wording div.note .textsf { font-family: 'Noto Sans'; font-size: var(--base-font-size-9); }
.wording div.example .textsf { font-family: 'Noto Sans'; font-size: var(--base-font-size-9); }

.wording div.note .math { font-size: var(--base-font-size-9); }
.wording div.example .math { font-size: var(--base-font-size-9); }

.wording a.footnotenum { display: none; }
.wording div.footnote { display: none; }
.wording div.footnoteSeparator { display: none; }
.wording .footnoteref { display: none; }

.wording div.nonNormativeOnly { display: none; }


</style>
	
<!-- may.css -->
<style>
:root {
	--hana-nav-size: 300px;
	--hana-article-left-padding: 300px;
	--hana-background: white;
	--hana-foreground: black;
	--hana-accent: hsl(215, 100%, 35%);
	--hana-hsl-saturated-bright: hsl(0 100% 75%);
	--hana-hsl-saturated-bright-contrast: hsl(0 100% 0%);
	--hana-nav-hide-transform: translate(-300px, 0px);
	--hana-selected-color: hsl(from var(--hana-hsl-saturated-bright) 220 s l);
	--hana-selected-background: color-mix(in hsl, var(--hana-selected-color), var(--hana-background) 70%);
}

@media (prefers-color-scheme: dark) {
	:root {
		--hana-background: #111;
		--hana-foreground: #DDD;
		--hana-accent: hsl(215, 50%, 73%);
		--hana-hsl-saturated-bright: hsl(0 25% 25%);
		--hana-hsl-saturated-bright-contrast: hsl(0 100% 50%);
	}
}

@media print {
	:root {
		--hana-accent: hsl(215, 100%, 23%);
	}
}

@media screen and (prefers-reduced-motion: reduce) {
	html {
		scroll-behavior: auto;
	}
}

@media only screen and (width >= 1000px) {
body:has(#hide.enabled) {
	--hana-article-left-padding: 0;
}
:root {
	--hana-paper-title-visibility: none;
	
		&:has(body #hide.enabled) {
			--hana-paper-title-visibility: initial;
		}
	}
}
}


@media only screen and (width < 1000px) {
	body {
		font-size: 150%;
	}
}

/* derived and named colors */
:root {
	--hana-menu-background: color-mix(in hsl, var(--hana-background), var(--hana-foreground) 3%);
	--hana-title-background: var(--hana-background);
	--hana-accent-foreground: color-mix(in lab, var(--hana-accent), var(--hana-foreground) 50%);
}

:root {
  overscroll-behavior: none;
}

body {
	overscroll-behavior: none;
	background-color: var(--hana-background);
	color: var(--hana-foreground);
	padding: 0;
	margin: 0;
	font-family: "Noto Serif", "CMU Sans Serif", "Times New Roman";
}

body::backdrop {
	background-color: var(--hana-background);
}

code {
	font-family: "Fira Code", "CMU Typewriter Text", "Times New Roman";
	font-size: 90%;
}

#hide {
	position: fixed;
	left: calc(var(--hana-nav-size) - 2em);
	bottom: 0.5em;
	cursor: pointer;
	z-index: 2000;
	transition: left 0.5s, color 0.5s, transform 0.5s ease-in-out;
	color: color-mix(in hsl, var(--hana-foreground), var(--hana-background) 80%);
	font-size: 20px;
}




@media only screen and (width >= 1000px) {
	#hide.enabled {
		left: 1em;
		transform: rotate(-180deg);
	}
	
	body {
		&:has(#hide.enabled) nav {
			transform: var(--hana-nav-hide-transform);
		}
	}
}



#paper-id {
	display: var(--hana-paper-title-visibility);
	font-size: 80%;
}

nav {
	position: fixed;
	top: 0;
	left: 0;
	bottom: 0;
	width: var(--hana-nav-size);
	padding: 1em;
	background: var(--hana-menu-background);
	color: var(--hana-foreground);
	box-sizing: border-box;
	
	overflow-wrap: break-word;
	hyphens: auto;
	word-spacing: 0;
	font-size: 90%;
	overflow-y: scroll;
	
	h1 {
		margin-top: 0;
		margin-bottom: 0;
	}
	
	.side {
		font-size: 80%;
	}
	
	.paper-info {
		display: grid;
		grid-template-columns: auto 1fr;
		.key {
			text-align: right;
			font-weight: bold;
			padding-right: 0.5em;
		}
		padding-right: 1em;
	}
	
	#toc {
		display: grid;
		grid-template-columns: 1fr;
		padding-top: 0.5lh;
		padding-bottom: 1lh;
		h1 {
			margin-bottom: 0.5em;
		}
		ul {
			padding-left: 1em;
			list-style-type: square;
		}
		> ul {
			padding-left: 2em;
			margin: 0;
		}
		
	}
}

@media only screen and (width < 1000px) {
	:root {
		--hana-article-left-padding: 0;
		--hana-title-background: var(--hana-menu-background);
	}
	nav {
		position: static;
		width: 100vw;
		margin: 0;
	}
	#hide {
		display: none;
	}
}

@media print {
	:root {
		--hana-article-left-padding: 0;
		--hana-title-background: var(--hana-menu-background);
	}
	nav {
		position: static;
		width: 100vw;
		margin: 0;
		transform: none !important;
	}
	section > p, section > pre {
		break-inside: avoid;
	}
	#toc {
		display: none;
	}
	#hide {
		display: none;
	}
}


article {	
	color: var(--hana-foreground);
	padding: 1em;
	margin-left: var(--hana-article-left-padding);
	max-width: 100vw;
	
	p:has(+section) {
		margin-bottom: 0;
	}
	
	section {
		> *:last-child {
			margin-bottom: 0;
		}
	}
	
	.wording, pre, code {
		background: color-mix(in lab, var(--hana-accent), var(--hana-background) 98%);
		&code {
			color: var(--hana-accent-foreground);
		}
	}
	
	.wording, pre {
		padding: 1em;
		border-radius: 1em;
		> *:first-child {
			margin-top: 0
		}
		> *:last-child {
			margin-bottom: 0
		}
	}
	
	.wording pre {
		padding: 0;
	}
	
	&.transitionable {
		/*transition: margin-left 0.5s;*/
	}
	
	pre {
		tab-size: 2;
		
		text-align: left;
		white-space: pre-wrap;
	  word-break: break-all;
		overflow-x: wrap;
		overflow-wrap: anywhere;
		
		code.hljs {
			.added, .removed, .before, .after {
				line-height: 1.3;
			}
			
			font-variant-ligatures: none;
			line-height: 1.3;
			* {
				font-size-adjust: 0.5;
			}
			.hljs-keyword, .hljs-built_in, .hljs-type {
				font-weight: bold;
			}
			.hljs-string {
				font-style: italic;
				text-decoration: underline;
			}
			.hljs-comment {
				color: color-mix(in hsl, currentcolor, var(--hana-background) 50%);
			}
		}
	}
	
	p:first-child {
		margin-top: 0;
	}
	
	p {
		color: color-mix(in hsl, var(--hana-foreground), var(--hana-background) 15%);
		text-align: left;
		overflow-wrap: break-word;
		hyphens: auto;
		word-spacing: 0;
		text-wrap: pretty;
	}
	
	.before {
		--hana-context-background: hsl(from var(--hana-hsl-saturated-bright) 0 s l);
		--hana-context-accent: hsl(from var(--hana-hsl-saturated-bright-contrast) 0 s l);
		z-index: 10;
		padding: 0 0.5em;
	}
	.after {
		--hana-context-background: hsl(from var(--hana-hsl-saturated-bright) 90 s l);
		--hana-context-accent: hsl(from var(--hana-hsl-saturated-bright-contrast) 90 s l);
		z-index: 20;
		padding: 0 0.5em;
	}
	.removed, .rem {
		--hana-context-background: hsl(from var(--hana-hsl-saturated-bright) 0 s l);
		--hana-context-accent: hsl(from var(--hana-hsl-saturated-bright-contrast) 0 s l);
		--hana-context-decoration: hsl(from var(--hana-hsl-saturated-bright) 0 s 40);
		--hana-context-text-decoration: hsl(from var(--hana-hsl-saturated-bright) 0 s 40 / 0.75);
		text-decoration: line-through;
	}
	.added, .add, .change {
		--hana-context-background: hsl(from var(--hana-hsl-saturated-bright) 90 s l);
		--hana-context-accent: hsl(from var(--hana-hsl-saturated-bright-contrast) 90 s l);
		--hana-context-decoration: hsl(from var(--hana-hsl-saturated-bright) 90 s 40);
		--hana-context-text-decoration: hsl(from var(--hana-hsl-saturated-bright) 90 s 40 / 0.75);
		&.alt {
			--hana-context-background: hsl(from var(--hana-hsl-saturated-bright) 50 s l);
			--hana-context-accent: hsl(from var(--hana-hsl-saturated-bright-contrast) 50 s l);
			--hana-context-decoration: hsl(from var(--hana-hsl-saturated-bright) 50 s 40);
			--hana-context-text-decoration: hsl(from var(--hana-hsl-saturated-bright) 50 s 40 / 0.75);
		}
	}
	.important {
		--hana-context-background: hsl(from var(--hana-hsl-saturated-bright) 60 s l);
		--hana-context-accent: hsl(from var(--hana-hsl-saturated-bright-contrast) 60 s l);
		--hana-context-decoration: hsl(from var(--hana-hsl-saturated-bright) 60 s 40);
		--hana-context-text-decoration: hsl(from var(--hana-hsl-saturated-bright) 60 s 40 / 0.75);
	}
	.removed, .rem, .added, .add {
		&, * {
			text-decoration-thickness: 3px;
			text-decoration-color: var(--hana-context-text-decoration);
		}
	}
	.removed, .rem, .added, .add, .change, .important {
		border-radius: 0.5em;
	}
	.before, .after, .removed, .rem, .added, .add, .important {
		print-color-adjust:exact;
		border: none;
		margin: 0;
		padding: 1px 0;
		background: var(--hana-context-background);
		h1, h2, h3, h4, h5, .note, .example, pre, code {
			background: inherit;
		}
		&, * {
			color: var(--hana-context-accent) !important;
		}
	}
}

body:fullscreen {
	overflow-y: scroll;
}

body:fullscreen article {
	overflow-y: scroll;
}

.added, .removed, .change {
	print-color-adjust:exact;
	&:has(&.selected-current) {
		z-index: 5006;
		position: relative;
		outline: 2px solid var(--hana-context-decoration);

		&, .added, .removed, change {
			&:not(.selected-current) {
				--hana-local-background: hsl(from var(--hana-context-background) calc(h - 15) calc(s) l);
				background: var(--hana-local-background) !important;
				outline: 1px solid var(--hana-local-background);
			}
		}
	}
}

.selected-current, .wording .texpara:has(.selected-current), .context:has(.selected-current) {
	z-index: 5005;
	position: relative;
	outline: 2px solid var(--hana-context-decoration);
	background: var(--hana-context-background);
	--special-hana: hana;
}

section:has(.selected-current) {
	& > h1 {
		z-index: 5030;
	}
	& > h2 {
		z-index: 5025;
	}
	& > h3 {
		z-index: 5020;
	}
	& > h4 {
		z-index: 5015;
	}
	& > h5 {
		z-index: 5010;
	}
}

#overlay {
	display: block;
	position: fixed;
	top: 0;
	bottom: 0;
	left: 0;
	right: 0;
	z-index: 5000;
	background-color: rgb(from var(--hana-background) r g b / 0.75);
	pointer-events: none;
}

/* links are all defined here! */
a {
	color: var(--hana-accent);
	&:visited {
		color: hsl(from var(--hana-accent) calc(h - 120) s l);
	}
	&:hover {
		color: hsl(from var(--hana-accent) calc(h + 120) s l) !important;
	}
	&::after {
		margin-left: 0.2em;
		display: inline-block;
		font-size: 80%;
		width: 1em;
		height: 1em;
	}
	&:target {
		outline: none;
		&::after {
			content: "⚓︎";
		}
	}
	&[href^="https://"], &[href^="http://"] {
		&:not(&.revision):not([href^="http://eel.is"]):not([href^="https://eel.is"]):not([href^="http://github.com/Eelis/"]) {
			@media only screen {
				&::after {
					font-family: "Noto Serif", "CMU Sans Serif", "Times New Roman";
					font-size: 14px;
					content: "⎋";
					transform: scale(-1, 1);
				}
			}
		}
	}
}

section {
	position: relative;
}

h1, h2, h3, h4, h5, hr {
	word-break: keep-all;
	white-space: nowrap;
	--hana-header-color: color-mix(in hsl, var(--hana-foreground), var(--hana-background) 15%);
	--hana-header-decoration-color: color-mix(in hsl, var(--hana-foreground), var(--hana-background) 75%);
	text-decoration: none;
	margin-bottom: 0;
	margin-top: 0;
	&:not(hr) {
		padding-top: 1lh;
	}
	line-height: 1.1;
	a {
		text-decoration: none;
		&, &:visited, &:hover, &:target {
			color: var(--hana-header-color) !important;
		}
	}
}

div:has(>h2) + p {
	margin-top: 0.5em;
}

hr {
	margin-top: 0.8em;
	height: 2px;
  background-color: none;
  border:none;
	border-top: 2px dotted var(--hana-header-decoration-color);
}

article {
	padding-top: 0;
}

h1#name-of-paper {
	/*position: sticky;*/
	top: 0lh;
	left: 16px;
	margin-top: 0;
	z-index: 5950;
	padding-top: 0.5lh;
	padding-bottom: 0.25lh;
}

body {
	position: relative;
}

article {
	position: relative;
	overflow-x: clip;
	/* text-wrap: pretty; // this will crash chrome */
	h1, h2, h3, h4, h5 {
		background-color: var(--hana-background);
		/*position: sticky;*/
		top: 0.5lh;
		z-index: 2000;
		box-shadow: 0 10px 10px var(--hana-background);
	}
	.wording {
		h1, h2, h3, h4, h5 {
			--hana-background: transparent;
			background-color: none;
			position: static;
			box-shadow: none;
		}
		.para:has(.marginalizedparent) {
			margin-left: 2em;
			.marginalizedparent {
				top: 1mm;
				* {
					font-size: 50%;
					color: orange;
				}
			}
		}
		code.itemdeclcode {
			overflow-wrap: anywhere !important;
			word-break: break-word;
			hyphens: auto;
			white-space: pre-wrap;
		}
	}
	h2 {
		top: 1lh;
		z-index: 1900;
		padding-left: 3px;
	}
	h3 {
		top: 2.25lh;
		z-index: 1800;
		padding-left: 6px;
	}
	h4 {
		top: 3.5lh;
		z-index: 1700;
		padding-left: 9px;
	}
	h5 {
		top: 6.5lh;
		z-index: 1800;
		padding-left: 12px;
	}
	.columns {
		display: flex;
		& > div {
			flex: auto;
			min-width: 300px;
		}
	}
}

.wording {
	h1, h2, h3, h4, h5 {
		position: static;
	}
}

@media only screen and (width < 1000px) {
	.wording {
		padding-left: 0em !important;
		padding-right: 0em !important;
	}
	body {
		overflow-x: hidden;
	}
	article {
		padding: 0 0.5em;
	}
	p {
		padding: 0 0.5em;
	}
	h1,h2,h3,h4,h5 {
		position: static !important;
		overflow-wrap: anywhere !important;
		word-break: break-word;
		hyphens: auto;
		white-space: pre-wrap;
	}
}


article section > h1, article > h1 {
	border-bottom: 2px solid var(--hana-header-decoration-color);
}

article section > h2 {
	border-bottom: 2px solid var(--hana-header-decoration-color);
}

article section > h3 {
	border-bottom: 2px dotted var(--hana-header-decoration-color);
}

article section > h4, article section > h5 {
	border-bottom: none;
}

.wording {
	padding-left: 2em;
	
	span.codeblock  {
		text-align: left;
		white-space: pre-wrap;
	  word-break: break-all;
		overflow-x: wrap !important;
		overflow-wrap: anywhere;
	}
	
	.comment {
		color: color-mix(in hsl, var(--hana-background), var(--hana-foreground) 75%) !important;
	}
	
	.note, .example {
		background-color: rgba(from var(--hana-foreground) r g b / 3%);
		padding: 0 0.3em;
		margin: 0.3em;
		border-radius: 0.3em;
		font-size: 95% !important;
		*:not(.note):not(.example) {
			background: none;
		}
	}
	
	code {
		text-align: left;
		white-space: pre-wrap;
	  word-break: break-all;
		overflow-x: wrap;
		overflow-wrap: anywhere;
		
		em {
			& * {
				font-style: italic;
				font-weight: normal !important;
			}
		}
	}
}

code, .wording .codeblock, .wording span.texttt, .wording span.terminal, .wording span.noncxxterminal .wording span.tcode, .wording span.mathtt, .wording div.footnote span.texttt, .wording span.tcode_in_codeblock, .wording .outputblock, .wording code.itemdeclcode, .wording span.literalterminal, .wording .MJXc-TeX-type-R {
	font-family: "Fira Code", "Noto Sans Mono", monospace !important;
	font-variant-ligatures: no-contextual;
	line-height: 1.3;
	* {
		font-size-adjust: 0.5;
	}
}

.hana_wording  {
	pre {
		padding-top: 1lh !important;
	}
	h2 {
    line-height: 1 !important;
    font-size: var(--base-font-size-16) !important;
    margin-top: 10pt !important;
    margin-bottom: 10pt !important;
	}
	h3 {
    line-height: 1 !important;
    margin-top: 10pt !important;
    margin-bottom: 10pt !important;
	}
}

@media screen {
	#draft-warning {
		position: fixed;
		bottom: 0;
		right: 0;
		background: red;
		font-family: "Fira Code", "Noto Sans Mono", monospace !important;
		font-size: 150%;
		padding: 8px 100px;
		text-transform: uppercase;
		transform: translateY(-30px) translateX(80px) rotate(-45deg);
		z-index: 50000;
		color: white;
	}
}
@media print {
	#draft-warning {
		display: none;
	}
}

ul {
	&:has(label) {
		padding-left: 0;
	}
	li:has(label) {
		list-style: none;
		list-style-position: inside;
	}
}

label:has(input[type="radio"]) {
	cursor: pointer;

	padding-left: 0.5em;
	
	line-height: 1.5;
	code {
		font-size-adjust: 0.5;
	}
	
	
	
	span {
		transition: background-color 0.2s ease-out;
		padding-left: 0.5em;
		padding-right: 0.5em;
		border-radius: 0.5em;
	}
	
	&:has(input:checked) {
		text-decoration: underline;
		text-decoration-style: dotted;
		text-decoration-thickness: 2px;
		span {
			background: var(--hana-background);
		}
		/*font-weight: bold;*/
	}
	
	&:has(input:disabled:not(:checked)) {
		color: color-mix(in hsl, var(--hana-foreground), var(--hana-background) 60%);
	}
	
	input {
		vertical-align: middle;
		-webkit-appearance: none;
		appearance: none;
		background-color: transparent;
		margin: 0;
		
		box-sizing: border-box;
		width: 1lh;
		height: 1lh;
	  padding: 0;
		margin-right: 0.5em;
		transition: border 0.2s ease-out, background 0.2s ease-out;
	  border: 2px solid color-mix(in hsl, var(--hana-foreground), var(--hana-background) 25%);
	  border-radius: 50%;
	  appearance: none;
	  background-color: transparent;
	  outline: none;
		&:checked {
			background: var(--hana-selected-color);
		}
		&:disabled {
			border: 2px solid color-mix(in hsl, var(--hana-foreground), var(--hana-background) 80%);
		}
	}
}

.poll_condition {
	&.discard {
		display: none;
	}
}

span.note {
	font-size: 80%;
	color: 2px solid color-mix(in hsl, var(--hana-foreground), var(--hana-background) 25%);
}

.wording {
	section:first-child[data-related] {
		> h1, > h2, > h3, > h4, > h5 {
			margin-top: 0;
			padding-top: 0;
		}
	}
}

.wording .example {
	& > span {
		font-style: italic;
	}
}

.wording .grammar {
	padding: 0em 1em;
	ul {
		padding-left: 4em;
		li:before {
			content: "";
		}
		li {
			list-style: none !important;
			list-style-position: inside;
		}
	}
}

div.poll {
	--poll-color: hsl(from var(--hana-hsl-saturated-bright) 45 s l);
	--poll-accent-color: hsl(from var(--poll-color) h 100% l);
	background-color: color-mix(in oklch, var(--hana-background), var(--poll-color) 25%);
	padding: 0.5em 1em;
	padding-bottom: 1em;
	margin-bottom: 0.5em !important;
	border-radius: 0.5em;
	
	code {
		background: transparent;
	}
	
	> div:not(.note) {
		> span:first-child {
			font-weight: bold;
		}
	}
	div.note {
		font-size: 75%;
	}
	
	.preferred {
		padding-left: 0.5em;
		font-size: 75%;
		display: inline-block;
		transform: translate(0, -0.05em);
	}
	
	label:has(input[type="radio"]) {
		&:has(input:checked) {
			text-decoration-color: var(--poll-accent-color);
			span {
				background: var(--poll-accent-color);
			}
		}
	}
}
</style>
</head>
<body>

<!-- navigation sidebar -->
	
<nav>
<div class="paper-info">
	<span class="key">Number:</span><span>P3791R0</span>
	<span class="key">Date:</span><span><time>2025-07-15</time></span>
	<span class="key">Audience:</span><span><a href="mailto:Library&nbsp;Evolution (YOU-NEED-JAVASCRIPT-ENABLED) #TGlicmFyeSZuYnNwO0V2b2x1dGlvbiA8bGliLWV4dEBsaXN0cy5pc29jcHAub3JnPj9zdWJqZWN0PVAzNzkxUjA6IGNvbnN0ZXhwciAoZGV0ZXJtaW5pc3RpYykgcmFuZG9t" onclick="return send_email(this)">Library&nbsp;Evolution</a></span>
	<span class='key'>Target:</span><span>C++29</span>	<span class="key">Author:</span><span><a href="mailto:hana dusikova (YOU-NEED-JAVASCRIPT-ENABLED) #SGFuYStEdXMlQzMlQURrb3YlQzMlQTEgPGhhbmlja2FAaGFuaWNrYS5uZXQ+P3N1YmplY3Q9UDM3OTFSMDogY29uc3RleHByIChkZXRlcm1pbmlzdGljKSByYW5kb20=" onclick="return send_email(this)">Hana Dusíková</a><span>
</div>
<hr/>
<div id="toc">
<ul>
<li><a href="#motivation">Motivation</a></li>
<ul>
<li><a href="#probabilistic-data-structures">Probabilistic data structures</a></li>
<li><a href="#consteval-tests">Consteval tests</a></li>
</ul>
<li><a href="#implementation-experience">Implementation experience</a></li>
<ul>
<li><a href="#implementation-in-libc%2B%2B">Implementation in libc++</a></li>
<li><a href="#research-of-libstdc%2B%2B">Research of libstdc++</a></li>
<li><a href="#research-of-msstl">Research of MSSTL</a></li>
</ul>
<li><a href="#wording">Wording</a></li>
<ul>
<li><a href="#what-is-changed-and-what-is-not">What is changed and what is not</a></li>
<li><a href="#header-%26lt%3Balgorithm%26gt%3B-synopsis">Header &lt;algorithm&gt; synopsis</a></li>
<li><a href="#sample-algorithm">Sample algorithm</a></li>
<li><a href="#shuffle-algorithm">Shuffle algorithm</a></li>
<li><a href="#distributions-and-generators">Distributions and generators</a></li>
<li><a href="#feature-test-macros">Feature test macros</a></li>
</ul>
</ul></div><div class="side"></div>
</nav>
<div id="hide">◀︎</div>
<!-- main content -->
<article spellcheck="true">
	<h1 id="name-of-paper"><span id="paper-id">P3791R0: </span>constexpr (deterministic) random</h1>
<p>This paper proposes making all <strong>deterministic</strong> algorithms and types associated with <em>random number generators</em> constant evaluatable. This paper doesn't propose making <code>random_device</code> type, <code>rand()</code> and <code>srand()</code> <code>constexpr</code> functions as these are not deterministic. Your builds won't be nondeterministic if this paper is merged into the standard.</p>
<section data-related="motivation"><h2><a href="#motivation" id="motivation">Motivation</a></h2><p>Algorithms <code>shuffle</code>, <code>sample</code> are useful even in compile time, same applies to random distribution types which are fully deterministic.</p>
<p>Making these functions <code>constexpr</code> limits the need for users to reimplement these and use <code>if consteval</code>, limiting number of errors due duplication of code.</p>
<section data-related="probabilistic-data-structures"><h3><a href="#probabilistic-data-structures" id="probabilistic-data-structures">Probabilistic data structures</a></h3><p>Special data structures types which use minimal amount of memory to classify items. They need <a href="https://en.wikipedia.org/wiki/Count–min_sketch">random sampling</a>. Users shouldn't reimplement sampling algorithms just because they can't use <code>std::ranges::sample</code>.</p>
<pre class="cpp"><code>constexpr sample_to_sketch(std::span&lt;const T&gt; items, sketch&lt;T&gt; &amp; sk) noexcept {
	// <span class="before">BEFORE: constructing object without non-constexpr constructor in constant evaluation</span>
	// <span class="after">AFTER:  fine</span>
	auto engine = std::mt19937_64{/* default seed is fine*/};
	// <span class="before">BEFORE: error: calling a non-constexpr function in constant evaluation</span>
	// <span class="after">AFTER:  fine</span>
	std::ranges::sample(items, std::insert_iterator(sk), sk.capacity(), engine); 
}</code></pre>
</section><section data-related="consteval-tests"><h3><a href="#consteval-tests" id="consteval-tests">Consteval tests</a></h3><p>Constant evaluatability of more code opens doors to run tests during compilation with constant evaluator, which also checks for undefined behaviour. When we will be able to measure proper path test coverage, including boundaries which introduce undefined behaviour in code. Reaching 100% such path coverage will allow us to detect all possible UB occurences. If there is still some UB reachable, constant evaluator will detect during test evaluation and fail to evaluate.</p>
</section></section><section data-related="implementation-experience"><h2><a href="#implementation-experience" id="implementation-experience">Implementation experience</a></h2><p>All types and algorithms touched by this proposal are already <code>template</code>-ed. Making these <code>constexpr</code> is mostly exercise in marking these with keyword <code>constexpr</code>. I talked with various implementors and they don't see any problem implementing this proposal.</p>
<section data-related="implementation-in-libc%2B%2B"><h3><a href="#implementation-in-libc%2B%2B" id="implementation-in-libc%2B%2B">Implementation in libc++</a></h3><p>It can be found at <a href="https://github.com/hanickadot/llvm-project/tree/feature/P3791-constexpr-deterministic-random">my github</a>, it will be available at compiler explorer once necessory changes there will be approved. Whole change was <a href="https://github.com/llvm/llvm-project/compare/main...hanickadot:llvm-project:feature/P3791-constexpr-deterministic-random">straightforward</a> and without any problem.</p>
</section><section data-related="research-of-libstdc%2B%2B"><h3><a href="#research-of-libstdc%2B%2B" id="research-of-libstdc%2B%2B">Research of libstdc++</a></h3><p>All code is in <a href="https://github.com/gcc-mirror/gcc/blob/e6d3c88e7bb07f94308074f9751e4384a191e022/libstdc%2B%2B-v3/include/std/random">header</a> (also <a href="https://github.com/gcc-mirror/gcc/blob/e6d3c88e7bb07f94308074f9751e4384a191e022/libstdc%2B%2B-v3/include/bits/random.h">bits/header.h</a> and <a href="https://github.com/gcc-mirror/gcc/blob/e6d3c88e7bb07f94308074f9751e4384a191e022/libstdc%2B%2B-v3/include/bits/random.tcc">bits/header.tcc</a>). I don't expect any problem.</p>
</section><section data-related="research-of-msstl"><h3><a href="#research-of-msstl" id="research-of-msstl">Research of MSSTL</a></h3><p>Similar situation situation, all defined in <a href="https://github.com/microsoft/STL/blob/e59dc201d19a57484d9e309e54ad66ef5055fff3/stl/inc/random#L30">&lt;random&gt; header file</a>, but there are few mathematical functions defined in <code>.cpp</code> files, like: <a href="https://github.com/microsoft/STL/blob/e59dc201d19a57484d9e309e54ad66ef5055fff3/stl/inc/random#L82-L84"><code>_XLgamma</code></a>.</p>

</section></section><section data-related="wording"><h2><a href="#wording" id="wording">Wording</a></h2><section data-related="what-is-changed-and-what-is-not"><h3><a href="#what-is-changed-and-what-is-not" id="what-is-changed-and-what-is-not">What is changed and what is not</a></h3><p>All deterministic algorithms and types in or depending on &lt;random&gt; should be constant evaluatable. This excludes <code>random_device</code> type and functions <code>rand()</code> and <code>srand()</code>.</p>
<p>This proposal also excludes iostream compatibility functions <code>operator&lt;&lt;</code> and <code>operator&gt;&gt;</code> as <code>iostream</code> types are not <code>constexpr</code> compatible yet (they will be in future proposal <a href="https://wg21.link/P3758">P3758</a>).</p>
</section><section data-related="header-%26lt%3Balgorithm%26gt%3B-synopsis"><h3><a href="#header-%26lt%3Balgorithm%26gt%3B-synopsis" id="header-%26lt%3Balgorithm%26gt%3B-synopsis">Header &lt;algorithm&gt; synopsis</a></h3>
<!-- algorithm.syn.html (wording) -->
<div class="wording">
<h2 ><a class='secnum' style='min-width:65pt'>26.4</a> Header <span class='texttt'>&lt;algorithm&gt;</span> synopsis <a class='abbr_ref'>[algorithm.syn]</a></h2><div class='texpara'><a class='index' id='header:<algorithm>'></a>
<span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
 
  <span class='comment'>// <a href='alg.random.sample' title='26.7.12&emsp;Sample'>[alg.<span class='shy'></span>random.<span class='shy'></span>sample]</a>, sample</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> PopulationIterator, <span class='keyword'>class</span> SampleIterator,
           <span class='keyword'>class</span> Distance, <span class='keyword'>class</span> UniformRandomBitGenerator<span class='anglebracket'>&gt;</span>
    <span class="added">constexpr </span>SampleIterator sample<span class='parenthesis'>(</span>PopulationIterator first, PopulationIterator last,
                          SampleIterator out, Distance n,
                          UniformRandomBitGenerator<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;

  <span class='keyword'>namespace</span> ranges <span class='curlybracket'>{</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='iterator.concept.input#concept:input_iterator' title='24.3.4.9&emsp;Concept input_&shy;iterator&emsp;[iterator.concept.input]'><span id='conceptref:input_iterator__________________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>iterator</span></span></a> I, <a href='iterator.concept.sentinel#concept:sentinel_for' title='24.3.4.7&emsp;Concept sentinel_&shy;for&emsp;[iterator.concept.sentinel]'><span id='conceptref:sentinel_for_________________________________________________________________'><span class='tcode_in_codeblock'>sentinel_<span class='shy'></span>for</span></span></a><span class='anglebracket'>&lt;</span>I<span class='anglebracket'>&gt;</span> S,
             <a href='iterator.concept.winc#concept:weakly_incrementable' title='24.3.4.4&emsp;Concept weakly_&shy;incrementable&emsp;[iterator.concept.winc]'><span id='conceptref:weakly_incrementable_____________________'><span class='tcode_in_codeblock'>weakly_<span class='shy'></span>incrementable</span></span></a> O, <span class='keyword'>class</span> Gen<span class='anglebracket'>&gt;</span>
      <span class='keyword'>requires</span> <span class='parenthesis'>(</span><a href='iterator.concept.forward#concept:forward_iterator' title='24.3.4.11&emsp;Concept forward_&shy;iterator&emsp;[iterator.concept.forward]'><span id='conceptref:forward_iterator___________________'><span class='tcode_in_codeblock'>forward_<span class='shy'></span>iterator</span></span></a><span class='anglebracket'>&lt;</span>I<span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span> <a href='iterator.concept.random.access#concept:random_access_iterator' title='24.3.4.13&emsp;Concept random_&shy;access_&shy;iterator&emsp;[iterator.concept.random.access]'><span id='conceptref:random_access_iterator'><span class='tcode_in_codeblock'>random_<span class='shy'></span>access_<span class='shy'></span>iterator</span></span></a><span class='anglebracket'>&lt;</span>O<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               <a href='alg.req.ind.copy#concept:indirectly_copyable' title='24.3.7.3&emsp;Concept indirectly_&shy;copyable&emsp;[alg.req.ind.copy]'><span id='conceptref:indirectly_copyable_____________________'><span class='tcode_in_codeblock'>indirectly_<span class='shy'></span>copyable</span></span></a><span class='anglebracket'>&lt;</span>I, O<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               <a href='rand.req.urng#concept:uniform_random_bit_generator' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'><span id='conceptref:uniform_random_bit_generator'><span class='tcode_in_codeblock'>uniform_<span class='shy'></span>random_<span class='shy'></span>bit_<span class='shy'></span>generator</span></span></a><span class='anglebracket'>&lt;</span>remove_reference_t<span class='anglebracket'>&lt;</span>Gen<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>O sample<span class='parenthesis'>(</span>I first, S last, O out, iter_difference_t<span class='anglebracket'>&lt;</span>I<span class='anglebracket'>&gt;</span> n, Gen<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='range.refinements#concept:input_range' title='25.4.6&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range______________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <a href='iterator.concept.winc#concept:weakly_incrementable' title='24.3.4.4&emsp;Concept weakly_&shy;incrementable&emsp;[iterator.concept.winc]'><span id='conceptref:weakly_incrementable______________________'><span class='tcode_in_codeblock'>weakly_<span class='shy'></span>incrementable</span></span></a> O, <span class='keyword'>class</span> Gen<span class='anglebracket'>&gt;</span>
      <span class='keyword'>requires</span> <span class='parenthesis'>(</span><a href='range.refinements#concept:forward_range' title='25.4.6&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:forward_range_____________________'><span class='tcode_in_codeblock'>forward_<span class='shy'></span>range</span></span></a><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span> <a href='iterator.concept.random.access#concept:random_access_iterator' title='24.3.4.13&emsp;Concept random_&shy;access_&shy;iterator&emsp;[iterator.concept.random.access]'><span id='conceptref:random_access_iterator_'><span class='tcode_in_codeblock'>random_<span class='shy'></span>access_<span class='shy'></span>iterator</span></span></a><span class='anglebracket'>&lt;</span>O<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               <a href='alg.req.ind.copy#concept:indirectly_copyable' title='24.3.7.3&emsp;Concept indirectly_&shy;copyable&emsp;[alg.req.ind.copy]'><span id='conceptref:indirectly_copyable______________________'><span class='tcode_in_codeblock'>indirectly_<span class='shy'></span>copyable</span></span></a><span class='anglebracket'>&lt;</span>iterator_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, O<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               <a href='rand.req.urng#concept:uniform_random_bit_generator' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'><span id='conceptref:uniform_random_bit_generator_'><span class='tcode_in_codeblock'>uniform_<span class='shy'></span>random_<span class='shy'></span>bit_<span class='shy'></span>generator</span></span></a><span class='anglebracket'>&lt;</span>remove_reference_t<span class='anglebracket'>&lt;</span>Gen<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>O sample<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> r, O out, range_difference_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span> n, Gen<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>

  <span class='comment'>// <a href='alg.random.shuffle' title='26.7.13&emsp;Shuffle'>[alg.<span class='shy'></span>random.<span class='shy'></span>shuffle]</a>, shuffle</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RandomAccessIterator, <span class='keyword'>class</span> UniformRandomBitGenerator<span class='anglebracket'>&gt;</span>
    <span class="added">constexpr </span><span class='keyword'>void</span> shuffle<span class='parenthesis'>(</span>RandomAccessIterator first,
                 RandomAccessIterator last,
                 UniformRandomBitGenerator<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;

  <span class='keyword'>namespace</span> ranges <span class='curlybracket'>{</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='iterator.concept.random.access#concept:random_access_iterator' title='24.3.4.13&emsp;Concept random_&shy;access_&shy;iterator&emsp;[iterator.concept.random.access]'><span id='conceptref:random_access_iterator__'><span class='tcode_in_codeblock'>random_<span class='shy'></span>access_<span class='shy'></span>iterator</span></span></a> I, <a href='iterator.concept.sentinel#concept:sentinel_for' title='24.3.4.7&emsp;Concept sentinel_&shy;for&emsp;[iterator.concept.sentinel]'><span id='conceptref:sentinel_for__________________________________________________________________'><span class='tcode_in_codeblock'>sentinel_<span class='shy'></span>for</span></span></a><span class='anglebracket'>&lt;</span>I<span class='anglebracket'>&gt;</span> S, <span class='keyword'>class</span> Gen<span class='anglebracket'>&gt;</span>
      <span class='keyword'>requires</span> <a href='alg.req.permutable#concept:permutable' title='24.3.7.6&emsp;Concept permutable&emsp;[alg.req.permutable]'><span id='conceptref:permutable__________'><span class='tcode_in_codeblock'>permutable</span></span></a><span class='anglebracket'>&lt;</span>I<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               <a href='rand.req.urng#concept:uniform_random_bit_generator' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'><span id='conceptref:uniform_random_bit_generator__'><span class='tcode_in_codeblock'>uniform_<span class='shy'></span>random_<span class='shy'></span>bit_<span class='shy'></span>generator</span></span></a><span class='anglebracket'>&lt;</span>remove_reference_t<span class='anglebracket'>&lt;</span>Gen<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>I shuffle<span class='parenthesis'>(</span>I first, S last, Gen<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='range.refinements#concept:random_access_range' title='25.4.6&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:random_access_range'><span class='tcode_in_codeblock'>random_<span class='shy'></span>access_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Gen<span class='anglebracket'>&gt;</span>
      <span class='keyword'>requires</span> <a href='alg.req.permutable#concept:permutable' title='24.3.7.6&emsp;Concept permutable&emsp;[alg.req.permutable]'><span id='conceptref:permutable___________'><span class='tcode_in_codeblock'>permutable</span></span></a><span class='anglebracket'>&lt;</span>iterator_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               <a href='rand.req.urng#concept:uniform_random_bit_generator' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'><span id='conceptref:uniform_random_bit_generator___'><span class='tcode_in_codeblock'>uniform_<span class='shy'></span>random_<span class='shy'></span>bit_<span class='shy'></span>generator</span></span></a><span class='anglebracket'>&lt;</span>remove_reference_t<span class='anglebracket'>&lt;</span>Gen<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>borrowed_iterator_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span> shuffle<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> r, Gen<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>

<span class='curlybracket'>}</span>
</span></div>
</div>
</section><section data-related="sample-algorithm"><h3><a href="#sample-algorithm" id="sample-algorithm">Sample algorithm</a></h3>
<!-- alg.random.sample.html (wording) -->
<div class="wording">
<h3 ><a class='secnum' style='min-width:80pt'>26.7.12</a> Sample <a class='abbr_ref'>[alg.random.sample]</a></h3><div class='texpara'><div id='lib:sample'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:sample'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> PopulationIterator, <span class='keyword'>class</span> SampleIterator,
         <span class='keyword'>class</span> Distance, <span class='keyword'>class</span> UniformRandomBitGenerator<span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>SampleIterator sample<span class='parenthesis'>(</span>PopulationIterator first, PopulationIterator last,
                        SampleIterator out, Distance n,
                        UniformRandomBitGenerator<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;

<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='iterator.concept.input#concept:input_iterator' title='24.3.4.9&emsp;Concept input_&shy;iterator&emsp;[iterator.concept.input]'><span id='conceptref:input_iterator'><span class='texttt'>input_<span class='shy'></span>iterator</span></span></a> I, <a href='iterator.concept.sentinel#concept:sentinel_for' title='24.3.4.7&emsp;Concept sentinel_&shy;for&emsp;[iterator.concept.sentinel]'><span id='conceptref:sentinel_for'><span class='texttt'>sentinel_<span class='shy'></span>for</span></span></a><span class='anglebracket'>&lt;</span>I<span class='anglebracket'>&gt;</span> S, <a href='iterator.concept.winc#concept:weakly_incrementable' title='24.3.4.4&emsp;Concept weakly_&shy;incrementable&emsp;[iterator.concept.winc]'><span id='conceptref:weakly_incrementable'><span class='texttt'>weakly_<span class='shy'></span>incrementable</span></span></a> O, <span class='keyword'>class</span> Gen<span class='anglebracket'>&gt;</span>
  <span class='keyword'>requires</span> <span class='parenthesis'>(</span><a href='iterator.concept.forward#concept:forward_iterator' title='24.3.4.11&emsp;Concept forward_&shy;iterator&emsp;[iterator.concept.forward]'><span id='conceptref:forward_iterator'><span class='texttt'>forward_<span class='shy'></span>iterator</span></span></a><span class='anglebracket'>&lt;</span>I<span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span> <a href='iterator.concept.random.access#concept:random_access_iterator' title='24.3.4.13&emsp;Concept random_&shy;access_&shy;iterator&emsp;[iterator.concept.random.access]'><span id='conceptref:random_access_iterator'><span class='texttt'>random_<span class='shy'></span>access_<span class='shy'></span>iterator</span></span></a><span class='anglebracket'>&lt;</span>O<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
           <a href='alg.req.ind.copy#concept:indirectly_copyable' title='24.3.7.3&emsp;Concept indirectly_&shy;copyable&emsp;[alg.req.ind.copy]'><span id='conceptref:indirectly_copyable'><span class='texttt'>indirectly_<span class='shy'></span>copyable</span></span></a><span class='anglebracket'>&lt;</span>I, O<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
           <a href='rand.req.urng#concept:uniform_random_bit_generator' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'><span id='conceptref:uniform_random_bit_generator'><span class='texttt'>uniform_<span class='shy'></span>random_<span class='shy'></span>bit_<span class='shy'></span>generator</span></span></a><span class='anglebracket'>&lt;</span>remove_reference_t<span class='anglebracket'>&lt;</span>Gen<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>O ranges<span class='operator'>::</span>sample<span class='parenthesis'>(</span>I first, S last, O out, iter_difference_t<span class='anglebracket'>&lt;</span>I<span class='anglebracket'>&gt;</span> n, Gen<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='range.refinements#concept:input_range' title='25.4.6&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range'><span class='texttt'>input_<span class='shy'></span>range</span></span></a> R, <a href='iterator.concept.winc#concept:weakly_incrementable' title='24.3.4.4&emsp;Concept weakly_&shy;incrementable&emsp;[iterator.concept.winc]'><span id='conceptref:weakly_incrementable_'><span class='texttt'>weakly_<span class='shy'></span>incrementable</span></span></a> O, <span class='keyword'>class</span> Gen<span class='anglebracket'>&gt;</span>
  <span class='keyword'>requires</span> <span class='parenthesis'>(</span><a href='range.refinements#concept:forward_range' title='25.4.6&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:forward_range'><span class='texttt'>forward_<span class='shy'></span>range</span></span></a><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span> <a href='iterator.concept.random.access#concept:random_access_iterator' title='24.3.4.13&emsp;Concept random_&shy;access_&shy;iterator&emsp;[iterator.concept.random.access]'><span id='conceptref:random_access_iterator_'><span class='texttt'>random_<span class='shy'></span>access_<span class='shy'></span>iterator</span></span></a><span class='anglebracket'>&lt;</span>O<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
           <a href='alg.req.ind.copy#concept:indirectly_copyable' title='24.3.7.3&emsp;Concept indirectly_&shy;copyable&emsp;[alg.req.ind.copy]'><span id='conceptref:indirectly_copyable_'><span class='texttt'>indirectly_<span class='shy'></span>copyable</span></span></a><span class='anglebracket'>&lt;</span>iterator_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, O<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
           <a href='rand.req.urng#concept:uniform_random_bit_generator' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'><span id='conceptref:uniform_random_bit_generator_'><span class='texttt'>uniform_<span class='shy'></span>random_<span class='shy'></span>bit_<span class='shy'></span>generator</span></span></a><span class='anglebracket'>&lt;</span>remove_reference_t<span class='anglebracket'>&lt;</span>Gen<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>O ranges<span class='operator'>::</span>sample<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> r, O out, range_difference_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span> n, Gen<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='1'><div class='marginalizedparent'><a class='marginalized' href='#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/algorithms.tex#L6564'>#</a></div><div class='texpara'><div id='1.sentence-1' class='sentence'><i >Mandates</i>: For the overload in namespace <span class='texttt'>std</span>,
<span class='texttt'>Distance</span> is an integer type and
<span class='texttt'><span class='operator'>*</span>first</span> is writable (<a href='iterator.requirements.general' title='24.3.1&emsp;General'>[iterator.<span class='shy'></span>requirements.<span class='shy'></span>general]</a>) to <span class='texttt'>out</span><a class='hidden_link' href='#1.sentence-1'>.</a></div></div></div></div><div class='para' id='2'><div class='marginalizedparent'><a class='marginalized' href='#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/algorithms.tex#L6570'>#</a></div><div class='texpara'><div id='2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>out</span> is not in the range [<span class='texttt'>first, last</span>)<a class='hidden_link' href='#2.sentence-1'>.</a></div> <div id='2.sentence-2' class='sentence'>For the overload in namespace <span class='texttt'>std</span>:
<ul class='itemize'><li id='2.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#2.1'>(2.1)</a></div><div class='texpara'><div id='2.1.sentence-1' class='sentence'><span class='texttt'>PopulationIterator</span> meets
  the <a href='input.iterators#:Cpp17InputIterator' title='24.3.5.3&emsp;Input iterators&emsp;[input.iterators]'><i >Cpp17InputIterator</i></a> requirements (<a href='input.iterators' title='24.3.5.3&emsp;Input iterators'>[input.<span class='shy'></span>iterators]</a>)<a class='hidden_link' href='#2.1.sentence-1'>.</a></div></div></li><li id='2.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#2.2'>(2.2)</a></div><div class='texpara'><div id='2.2.sentence-1' class='sentence'><span class='texttt'>SampleIterator</span> meets
  the <a href='output.iterators#:Cpp17OutputIterator' title='24.3.5.4&emsp;Output iterators&emsp;[output.iterators]'><i >Cpp17OutputIterator</i></a> requirements (<a href='output.iterators' title='24.3.5.4&emsp;Output iterators'>[output.<span class='shy'></span>iterators]</a>)<a class='hidden_link' href='#2.2.sentence-1'>.</a></div></div></li><li id='2.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#2.3'>(2.3)</a></div><div class='texpara'><div id='2.3.sentence-1' class='sentence'><span class='texttt'>SampleIterator</span> meets
  the <a href='random.access.iterators#:Cpp17RandomAccessIterator' title='24.3.5.7&emsp;Random access iterators&emsp;[random.access.iterators]'><i >Cpp17RandomAccessIterator</i></a> requirements (<a href='random.access.iterators' title='24.3.5.7&emsp;Random access iterators'>[random.<span class='shy'></span>access.<span class='shy'></span>iterators]</a>)
  unless <span class='texttt'>PopulationIterator</span>
  models <a href='iterator.concept.forward#concept:forward_iterator' title='24.3.4.11&emsp;Concept forward_&shy;iterator&emsp;[iterator.concept.forward]'><span id='conceptref:forward_iterator_'><span class='texttt'>forward_<span class='shy'></span>iterator</span></span></a> (<a href='iterator.concept.forward' title='24.3.4.11&emsp;Concept forward_&shy;iterator'>[iterator.<span class='shy'></span>concept.<span class='shy'></span>forward]</a>)<a class='hidden_link' href='#2.3.sentence-1'>.</a></div></div></li><li id='2.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#2.4'>(2.4)</a></div><div class='texpara'><div id='2.4.sentence-1' class='sentence'><span class='texttt'>remove_<span class='shy'></span>reference_<span class='shy'></span>t<span class='anglebracket'>&lt;</span>UniformRandomBitGenerator<span class='anglebracket'>&gt;</span></span> meets
  the requirements of a uniform random bit generator type (<a href='rand.req.urng' title='29.5.3.3&emsp;Uniform random bit generator requirements'>[rand.<span class='shy'></span>req.<span class='shy'></span>urng]</a>)<a class='hidden_link' href='#2.4.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='para' id='3'><div class='marginalizedparent'><a class='marginalized' href='#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/algorithms.tex#L6591'>#</a></div><div class='texpara'><div id='3.sentence-1' class='sentence'><i >Effects</i>: Copies <span class='math'><span class="mathrm">min</span>(<span class='texttt'>last <span class='operator'>-</span> first</span>, &nbsp;<span class='texttt'>n</span>)</span> elements (the <a class='hidden_link' href='#def:sample' title='26.7.12&emsp;Sample&emsp;[alg.random.sample]'><span id='def:sample'><i >sample</i></span></a>)
from [<span class='texttt'>first, last</span>) (the <a class='hidden_link' href='#def:population' title='26.7.12&emsp;Sample&emsp;[alg.random.sample]'><span id='def:population'><i >population</i></span></a>) to <span class='texttt'>out</span>
such that each possible sample has equal probability of appearance<a class='hidden_link' href='#3.sentence-1'>.</a></div> <div id='note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#note-1'>1</a></i>:&ensp;<div id='3.sentence-2' class='sentence'>Algorithms that obtain such effects include <a class='hidden_link' href='#def:selection_sampling' id='def:selection_sampling'><i>selection sampling</i></a>
and <a class='hidden_link' href='#def:reservoir_sampling' id='def:reservoir_sampling'><i>reservoir sampling</i></a><a class='hidden_link' href='#3.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div><div class='para' id='4'><div class='marginalizedparent'><a class='marginalized' href='#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/algorithms.tex#L6601'>#</a></div><div class='texpara'><div id='4.sentence-1' class='sentence'><i >Returns</i>: The end of the resulting sample range<a class='hidden_link' href='#4.sentence-1'>.</a></div></div></div></div><div class='para' id='5'><div class='marginalizedparent'><a class='marginalized' href='#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/algorithms.tex#L6605'>#</a></div><div class='texpara'><div id='5.sentence-1' class='sentence'><i >Complexity</i>: <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char" style="padding-top: 0.446em; padding-bottom: 0.004em;"><span class="mjx-charbox MJXc-TeX-type-R" style="padding-bottom: 0.233em; margin-right: 0.275em;">last </span><span class="mjx-charbox MJXc-TeX-type-R" style="padding-bottom: 0.233em; margin-right: 0.275em;"><span class='operator'>-</span> </span><span class="mjx-charbox MJXc-TeX-type-R" style="padding-bottom: 0.233em;">first</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><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></span><a class='hidden_link' href='#5.sentence-1'>.</a></div></div></div></div><div class='para' id='6'><div class='marginalizedparent'><a class='marginalized' href='#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/algorithms.tex#L6609'>#</a></div><div class='texpara'><div id='6.sentence-1' class='sentence'><i >Remarks</i>: <ul class='itemize'><li id='6.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#6.1'>(6.1)</a></div><div class='texpara'><div id='6.1.sentence-1' class='sentence'>For the overload in namespace <span class='texttt'>std</span>,
  stable if and only if <span class='texttt'>PopulationIterator</span>
  models <a href='iterator.concept.forward#concept:forward_iterator' title='24.3.4.11&emsp;Concept forward_&shy;iterator&emsp;[iterator.concept.forward]'><span id='conceptref:forward_iterator__'><span class='texttt'>forward_<span class='shy'></span>iterator</span></span></a><a class='hidden_link' href='#6.1.sentence-1'>.</a></div> <div id='6.1.sentence-2' class='sentence'>For the first overload in namespace <span class='texttt'>ranges</span>,
  stable if and only if <span class='texttt'>I</span> models <a href='iterator.concept.forward#concept:forward_iterator' title='24.3.4.11&emsp;Concept forward_&shy;iterator&emsp;[iterator.concept.forward]'><span id='conceptref:forward_iterator___'><span class='texttt'>forward_<span class='shy'></span>iterator</span></span></a><a class='hidden_link' href='#6.1.sentence-2'>.</a></div></div></li><li id='6.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#6.2'>(6.2)</a></div><div class='texpara'><div id='6.2.sentence-1' class='sentence'>To the extent that the implementation of this function makes use
  of random numbers, the object <span class='texttt'>g</span> serves as
  the implementation's source of randomness<a class='hidden_link' href='#6.2.sentence-1'>.</a></div></div></li></ul></div></div></div></div>
</div>
</section><section data-related="shuffle-algorithm"><h3><a href="#shuffle-algorithm" id="shuffle-algorithm">Shuffle algorithm</a></h3>
<!-- alg.random.shuffle.html (wording) -->
<div class="wording">
<h3 ><a class='secnum' style='min-width:80pt'>26.7.13</a> Shuffle <a class='abbr_ref'>[alg.random.shuffle]</a></h3><div class='texpara'><div id='lib:shuffle'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:shuffle'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RandomAccessIterator, <span class='keyword'>class</span> UniformRandomBitGenerator<span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span><span class='keyword'>void</span> shuffle<span class='parenthesis'>(</span>RandomAccessIterator first,
               RandomAccessIterator last,
               UniformRandomBitGenerator<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;

<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='iterator.concept.random.access#concept:random_access_iterator' title='24.3.4.13&emsp;Concept random_&shy;access_&shy;iterator&emsp;[iterator.concept.random.access]'><span id='conceptref:random_access_iterator'><span class='texttt'>random_<span class='shy'></span>access_<span class='shy'></span>iterator</span></span></a> I, <a href='iterator.concept.sentinel#concept:sentinel_for' title='24.3.4.7&emsp;Concept sentinel_&shy;for&emsp;[iterator.concept.sentinel]'><span id='conceptref:sentinel_for'><span class='texttt'>sentinel_<span class='shy'></span>for</span></span></a><span class='anglebracket'>&lt;</span>I<span class='anglebracket'>&gt;</span> S, <span class='keyword'>class</span> Gen<span class='anglebracket'>&gt;</span>
  <span class='keyword'>requires</span> <a href='alg.req.permutable#concept:permutable' title='24.3.7.6&emsp;Concept permutable&emsp;[alg.req.permutable]'><span id='conceptref:permutable'><span class='texttt'>permutable</span></span></a><span class='anglebracket'>&lt;</span>I<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
           <a href='rand.req.urng#concept:uniform_random_bit_generator' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'><span id='conceptref:uniform_random_bit_generator'><span class='texttt'>uniform_<span class='shy'></span>random_<span class='shy'></span>bit_<span class='shy'></span>generator</span></span></a><span class='anglebracket'>&lt;</span>remove_reference_t<span class='anglebracket'>&lt;</span>Gen<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>I ranges<span class='operator'>::</span>shuffle<span class='parenthesis'>(</span>I first, S last, Gen<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='range.refinements#concept:random_access_range' title='25.4.6&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:random_access_range'><span class='texttt'>random_<span class='shy'></span>access_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Gen<span class='anglebracket'>&gt;</span>
  <span class='keyword'>requires</span> <a href='alg.req.permutable#concept:permutable' title='24.3.7.6&emsp;Concept permutable&emsp;[alg.req.permutable]'><span id='conceptref:permutable_'><span class='texttt'>permutable</span></span></a><span class='anglebracket'>&lt;</span>iterator_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
           <a href='rand.req.urng#concept:uniform_random_bit_generator' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'><span id='conceptref:uniform_random_bit_generator_'><span class='texttt'>uniform_<span class='shy'></span>random_<span class='shy'></span>bit_<span class='shy'></span>generator</span></span></a><span class='anglebracket'>&lt;</span>remove_reference_t<span class='anglebracket'>&lt;</span>Gen<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>borrowed_iterator_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span> ranges<span class='operator'>::</span>shuffle<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> r, Gen<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='1'><div class='marginalizedparent'><a class='marginalized' href='#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/algorithms.tex#L6645'>#</a></div><div class='texpara'><div id='1.sentence-1' class='sentence'><i >Preconditions</i>: For the overload in namespace <span class='texttt'>std</span>:
<ul class='itemize'><li id='1.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#1.1'>(1.1)</a></div><div class='texpara'><div id='1.1.sentence-1' class='sentence'><span class='texttt'>RandomAccessIterator</span> meets
  the <a href='swappable.requirements#:Cpp17ValueSwappable' title='16.4.4.3&emsp;Swappable requirements&emsp;[swappable.requirements]'><i >Cpp17ValueSwappable</i></a> requirements (<a href='swappable.requirements' title='16.4.4.3&emsp;Swappable requirements'>[swappable.<span class='shy'></span>requirements]</a>)<a class='hidden_link' href='#1.1.sentence-1'>.</a></div></div></li><li id='1.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#1.2'>(1.2)</a></div><div class='texpara'><div id='1.2.sentence-1' class='sentence'>The type <span class='texttt'>remove_<span class='shy'></span>reference_<span class='shy'></span>t<span class='anglebracket'>&lt;</span>UniformRandomBitGenerator<span class='anglebracket'>&gt;</span></span> meets
  the uniform random bit generator (<a href='rand.req.urng' title='29.5.3.3&emsp;Uniform random bit generator requirements'>[rand.<span class='shy'></span>req.<span class='shy'></span>urng]</a>) requirements<a class='hidden_link' href='#1.2.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='para' id='2'><div class='marginalizedparent'><a class='marginalized' href='#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/algorithms.tex#L6657'>#</a></div><div class='texpara'><div id='2.sentence-1' class='sentence'><i >Effects</i>: Permutes the elements in the range [<span class='texttt'>first, last</span>)
such that each possible permutation of those elements
has equal probability of appearance<a class='hidden_link' href='#2.sentence-1'>.</a></div></div></div></div><div class='para' id='3'><div class='marginalizedparent'><a class='marginalized' href='#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/algorithms.tex#L6663'>#</a></div><div class='texpara'><div id='3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>last</span> for the overloads in namespace <span class='texttt'>ranges</span><a class='hidden_link' href='#3.sentence-1'>.</a></div></div></div></div><div class='para' id='4'><div class='marginalizedparent'><a class='marginalized' href='#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/algorithms.tex#L6667'>#</a></div><div class='texpara'><div id='4.sentence-1' class='sentence'><i >Complexity</i>: Exactly <span class='texttt'><span class='parenthesis'>(</span>last <span class='operator'>-</span> first<span class='parenthesis'>)</span> <span class='operator'>-</span> <span class='literal'>1</span></span> swaps<a class='hidden_link' href='#4.sentence-1'>.</a></div></div></div></div><div class='para' id='5'><div class='marginalizedparent'><a class='marginalized' href='#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/algorithms.tex#L6671'>#</a></div><div class='texpara'><div id='5.sentence-1' class='sentence'><i >Remarks</i>: To the extent that the implementation of this function makes use
of random numbers, the object referenced by <span class='texttt'>g</span> shall serve as
the implementation's source of randomness<a class='hidden_link' href='#5.sentence-1'>.</a></div></div></div></div>
</div>
</section><section data-related="distributions-and-generators"><h3><a href="#distributions-and-generators" id="distributions-and-generators">Distributions and generators</a></h3>
<!-- rand.html (wording) -->
<div class="wording">
<h2 ><a class='secnum' style='min-width:65pt'>29.5</a> Random number generation <a class='abbr_ref'>[rand]</a></h2><div id='general' class='section'><h3 ><a class='secnum' href='#general' style='min-width:80pt'>29.5.1</a> General <a class='abbr_ref' href='rand.general'>[rand.general]</a></h3><div class='texpara'><a class='index' id=':random_number_generation'></a></div><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='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1278'>#</a></div><div class='texpara'><div id='general-1.sentence-1' class='sentence'>Subclause [rand] defines a facility
for generating (pseudo-)random numbers<a class='hidden_link' href='#general-1.sentence-1'>.</a></div></div></div><div class='para' id='general-2'><div class='marginalizedparent'><a class='marginalized' href='#general-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1282'>#</a></div><div class='texpara'><div id='general-2.sentence-1' class='sentence'>In addition to a few utilities,
four categories of entities are described:
<a class='hidden_link' href='#def:uniform_random_bit_generators' id='def:uniform_random_bit_generators'><i>uniform random bit generators</i></a>,
<a class='hidden_link' href='#def:random_number_engines' id='def:random_number_engines'><i>random number engines</i></a>,
<a class='hidden_link' href='#def:random_number_engine_adaptors' id='def:random_number_engine_adaptors'><i>random number engine adaptors</i></a>,
and
<a class='hidden_link' href='#def:random_number_distributions' id='def:random_number_distributions'><i>random number distributions</i></a><a class='hidden_link' href='#general-2.sentence-1'>.</a></div> <div id='general-2.sentence-2' class='sentence'>These categorizations are applicable
to types that meet the corresponding requirements,
to objects instantiated from such types,
and to templates producing such types when instantiated<a class='hidden_link' href='#general-2.sentence-2'>.</a></div> <div id='general-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#general-note-1'>1</a></i>:&ensp;<div id='general-2.sentence-3' class='sentence'>These entities are specified in such a way
 as to permit the binding
 of any uniform random bit generator object <span class='texttt'>e</span>
 as the argument
 to any random number distribution object <span class='texttt'>d</span>,
 thus producing a zero-argument function object
 such as given by
 <span class='texttt'>bind<span class='parenthesis'>(</span>d,e<span class='parenthesis'>)</span></span><a class='hidden_link' href='#general-2.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='general-3'><div class='marginalizedparent'><a class='marginalized' href='#general-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1305'>#</a></div><div class='texpara'><div id='general-3.sentence-1' class='sentence'>Each of the entities specified in [rand]
has an associated arithmetic type (<a href='basic.fundamental' title='6.8.2&emsp;Fundamental types'>[basic.<span class='shy'></span>fundamental]</a>)
identified as <span class='texttt'>result_<span class='shy'></span>type</span><a class='hidden_link' href='#general-3.sentence-1'>.</a></div> <div id='general-3.sentence-2' class='sentence'>With <span class='texttt'>T</span> as the <span class='texttt'>result_<span class='shy'></span>type</span>
thus associated with such an entity,
that entity is characterized:
<ul class='itemize'><li id='general-3.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#general-3.1'>(3.1)</a></div>as <a class='hidden_link' href='#def:boolean' id='def:boolean'><i>boolean</i></a> or equivalently as <a class='hidden_link' href='#def:boolean-valued' id='def:boolean-valued'><i>boolean-valued</i></a>,
   if <span class='texttt'>T</span> is <span class='texttt'><span class='keyword'>bool</span></span>;</li><li id='general-3.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#general-3.2'>(3.2)</a></div>otherwise
   as <a class='hidden_link' href='#def:integral' id='def:integral'><i>integral</i></a> or equivalently as <a class='hidden_link' href='#def:integer-valued' id='def:integer-valued'><i>integer-valued</i></a>,
   if <span class='texttt'>numeric_<span class='shy'></span>limits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>integer</span> is <span class='texttt'><span class='literal'>true</span></span>;</li><li id='general-3.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#general-3.3'>(3.3)</a></div>otherwise
   as <a class='hidden_link' href='#def:floating-point' id='def:floating-point'><i>floating-point</i></a> or equivalently as <a class='hidden_link' href='#def:real-valued' id='def:real-valued'><i>real-valued</i></a><a class='hidden_link' href='#general-3.sentence-2'>.</a></li></ul></div> <div id='general-3.sentence-3' class='sentence'>
If integer-valued,
an entity may optionally be further characterized as
<a class='hidden_link' href='#def:signed' id='def:signed'><i>signed</i></a> or <a class='hidden_link' href='#def:unsigned' id='def:unsigned'><i>unsigned</i></a>,
according to <span class='texttt'>numeric_<span class='shy'></span>limits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>signed</span><a class='hidden_link' href='#general-3.sentence-3'>.</a></div></div></div><div class='para' id='general-4'><div class='marginalizedparent'><a class='marginalized' href='#general-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1330'>#</a></div><div class='texpara'><div id='general-4.sentence-1' class='sentence'>Unless otherwise specified,
all descriptions of calculations
in [rand]
use mathematical real numbers<a class='hidden_link' href='#general-4.sentence-1'>.</a></div></div></div><div class='para' id='general-5'><div class='marginalizedparent'><a class='marginalized' href='#general-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1336'>#</a></div><div class='texpara'><div id='general-5.sentence-1' class='sentence'>Throughout [rand],
the operators
<span class='math'><span class='mathbin'><span class='mathsf'>bitand</span></span></span>, <span class='math'><span class='mathbin'><span class='mathsf'>bitor</span></span></span>, and <span class='math'><span class='mathbin'><span class='mathsf'>xor</span></span></span>
denote the respective conventional bitwise operations<a class='hidden_link' href='#general-5.sentence-1'>.</a></div> <div id='general-5.sentence-2' class='sentence'>Further:
<ul class='itemize'><li id='general-5.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#general-5.1'>(5.1)</a></div>the operator <span class='math'><span class='mathbin'><span class='mathsf'>rshift</span></span></span> denotes a bitwise right shift
   with zero-valued bits appearing in the high bits of the result, and</li><li id='general-5.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#general-5.2'>(5.2)</a></div>the operator <span class='math'><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-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">l</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">h</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.041em;">f</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span></span></span></span></span></span></span></span></span> denotes a bitwise left shift
   with zero-valued bits appearing in the low bits of the result,
   and whose result is always taken modulo <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span></span></span></span></span><a class='hidden_link' href='#general-5.sentence-2'>.</a></li></ul></div></div></div></div><div id='synopsis' class='section'><h3 ><a class='secnum' href='#synopsis' style='min-width:80pt'>29.5.2</a> Header <span class='texttt'>&lt;random&gt;</span> synopsis <a class='abbr_ref' href='rand.synopsis'>[rand.synopsis]</a></h3><div class='texpara'><a class='index' id='header:<random>'></a>
<a class='index' id=':random_number_generation,synopsis'></a></div><div class='texpara'><span class='codeblock'><span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>initializer_list<span class='anglebracket'>&gt;</span>     <span class='comment'>// see <a href='initializer.list.syn' title='17.11.2&emsp;Header &lt;initializer_&shy;list&gt; synopsis'>[initializer.<span class='shy'></span>list.<span class='shy'></span>syn]</a></span>

<span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='comment'>// <a href='#req.urng' title='29.5.3.3&emsp;Uniform random bit generator requirements'>[rand.<span class='shy'></span>req.<span class='shy'></span>urng]</a>, uniform random bit generator requirements</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> G<span class='anglebracket'>&gt;</span>
    <span class='keyword'>concept</span> uniform_random_bit_generator <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;           <span class='comment'>// freestanding</span>

  <span class='comment'>// <a href='#eng.lcong' title='29.5.4.2&emsp;Class template linear_&shy;congruential_&shy;engine'>[rand.<span class='shy'></span>eng.<span class='shy'></span>lcong]</a>, class template <span class='tcode_in_codeblock'>linear_<span class='shy'></span>congruential_<span class='shy'></span>engine</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UIntType, UIntType a, UIntType c, UIntType m<span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> linear_congruential_engine;                           <span class='comment'>// partially freestanding</span>

  <span class='comment'>// <a href='#eng.mers' title='29.5.4.3&emsp;Class template mersenne_&shy;twister_&shy;engine'>[rand.<span class='shy'></span>eng.<span class='shy'></span>mers]</a>, class template <span class='tcode_in_codeblock'>mersenne_<span class='shy'></span>twister_<span class='shy'></span>engine</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UIntType, size_t w, size_t n, size_t m, size_t r,
           UIntType a, size_t u, UIntType d, size_t s,
           UIntType b, size_t t,
           UIntType c, size_t l, UIntType f<span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> mersenne_twister_engine;

  <span class='comment'>// <a href='#eng.sub' title='29.5.4.4&emsp;Class template subtract_&shy;with_&shy;carry_&shy;engine'>[rand.<span class='shy'></span>eng.<span class='shy'></span>sub]</a>, class template <span class='tcode_in_codeblock'>subtract_<span class='shy'></span>with_<span class='shy'></span>carry_<span class='shy'></span>engine</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UIntType, size_t w, size_t s, size_t r<span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> subtract_with_carry_engine;                           <span class='comment'>// partially freestanding</span>

  <span class='comment'>// <a href='#adapt.disc' title='29.5.5.2&emsp;Class template discard_&shy;block_&shy;engine'>[rand.<span class='shy'></span>adapt.<span class='shy'></span>disc]</a>, class template <span class='tcode_in_codeblock'>discard_<span class='shy'></span>block_<span class='shy'></span>engine</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Engine, size_t p, size_t r<span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> discard_block_engine;                                 <span class='comment'>// partially freestanding</span>

  <span class='comment'>// <a href='#adapt.ibits' title='29.5.5.3&emsp;Class template independent_&shy;bits_&shy;engine'>[rand.<span class='shy'></span>adapt.<span class='shy'></span>ibits]</a>, class template <span class='tcode_in_codeblock'>independent_<span class='shy'></span>bits_<span class='shy'></span>engine</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Engine, size_t w, <span class='keyword'>class</span> UIntType<span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> independent_bits_engine;                              <span class='comment'>// partially freestanding</span>

  <span class='comment'>// <a href='#adapt.shuf' title='29.5.5.4&emsp;Class template shuffle_&shy;order_&shy;engine'>[rand.<span class='shy'></span>adapt.<span class='shy'></span>shuf]</a>, class template <span class='tcode_in_codeblock'>shuffle_<span class='shy'></span>order_<span class='shy'></span>engine</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Engine, size_t k<span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> shuffle_order_engine;

  <span class='comment'>// <a href='#eng.philox' title='29.5.4.5&emsp;Class template philox_&shy;engine'>[rand.<span class='shy'></span>eng.<span class='shy'></span>philox]</a>, class template <span class='tcode_in_codeblock'>philox_<span class='shy'></span>engine</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UIntType, size_t w, size_t n, size_t r, UIntType<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> consts<span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> philox_engine;

  <span class='comment'>// <a href='#predef' title='29.5.6&emsp;Engines and engine adaptors with predefined parameters'>[rand.<span class='shy'></span>predef]</a>, engines and engine adaptors with predefined parameters</span>
  <span class='keyword'>using</span> minstd_rand0  <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;      <span class='comment'>// freestanding</span>
  <span class='keyword'>using</span> minstd_rand   <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;      <span class='comment'>// freestanding</span>
  <span class='keyword'>using</span> mt19937       <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;      <span class='comment'>// freestanding</span>
  <span class='keyword'>using</span> mt19937_64    <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;      <span class='comment'>// freestanding</span>
  <span class='keyword'>using</span> ranlux24_base <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;      <span class='comment'>// freestanding</span>
  <span class='keyword'>using</span> ranlux48_base <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;      <span class='comment'>// freestanding</span>
  <span class='keyword'>using</span> ranlux24      <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;      <span class='comment'>// freestanding</span>
  <span class='keyword'>using</span> ranlux48      <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;      <span class='comment'>// freestanding</span>
  <span class='keyword'>using</span> knuth_b       <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
  <span class='keyword'>using</span> philox4x32    <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
  <span class='keyword'>using</span> philox4x64    <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;

  <span class='keyword'>using</span> default_random_engine <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;

  <span class='comment'>// <a href='#device' title='29.5.7&emsp;Class random_&shy;device'>[rand.<span class='shy'></span>device]</a>, class <span class='tcode_in_codeblock'>random_<span class='shy'></span>device</span></span>
  <span class='keyword'>class</span> random_device;

  <span class='comment'>// <a href='#util.seedseq' title='29.5.8.1&emsp;Class seed_&shy;seq'>[rand.<span class='shy'></span>util.<span class='shy'></span>seedseq]</a>, class <span class='tcode_in_codeblock'>seed_<span class='shy'></span>seq</span></span>
  <span class='keyword'>class</span> seed_seq;

  <span class='comment'>// <a href='#util.canonical' title='29.5.8.2&emsp;Function template generate_&shy;canonical'>[rand.<span class='shy'></span>util.<span class='shy'></span>canonical]</a>, function template <span class='tcode_in_codeblock'>generate_<span class='shy'></span>canonical</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType, size_t digits, <span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
    <span class="added">constexpr </span>RealType generate_canonical<span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;

  <span class='keyword'>namespace</span> ranges <span class='curlybracket'>{</span>
    <span class='comment'>// <a href='alg.rand.generate' title='26.12.2&emsp;generate_&shy;random'>[alg.<span class='shy'></span>rand.<span class='shy'></span>generate]</a>, <span class='tcode_in_codeblock'>generate_<span class='shy'></span>random</span></span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> R, <span class='keyword'>class</span> G<span class='anglebracket'>&gt;</span>
      <span class='keyword'>requires</span> <a href='range.refinements#concept:output_range' title='25.4.6&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:output_range'><span class='tcode_in_codeblock'>output_<span class='shy'></span>range</span></span></a><span class='anglebracket'>&lt;</span>R, invoke_result_t<span class='anglebracket'>&lt;</span>G<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               <a href='#concept:uniform_random_bit_generator' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'><span id='conceptref:uniform_random_bit_generator'><span class='tcode_in_codeblock'>uniform_<span class='shy'></span>random_<span class='shy'></span>bit_<span class='shy'></span>generator</span></span></a><span class='anglebracket'>&lt;</span>remove_cvref_t<span class='anglebracket'>&lt;</span>G<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class='keyword'>constexpr</span> borrowed_iterator_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span> generate_random<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> r, G<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> G, <a href='iterator.concept.output#concept:output_iterator' title='24.3.4.10&emsp;Concept output_&shy;iterator&emsp;[iterator.concept.output]'><span id='conceptref:output_iterator'><span class='tcode_in_codeblock'>output_<span class='shy'></span>iterator</span></span></a><span class='anglebracket'>&lt;</span>invoke_result_t<span class='anglebracket'>&lt;</span>G<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> O, <a href='iterator.concept.sentinel#concept:sentinel_for' title='24.3.4.7&emsp;Concept sentinel_&shy;for&emsp;[iterator.concept.sentinel]'><span id='conceptref:sentinel_for'><span class='tcode_in_codeblock'>sentinel_<span class='shy'></span>for</span></span></a><span class='anglebracket'>&lt;</span>O<span class='anglebracket'>&gt;</span> S<span class='anglebracket'>&gt;</span>
      <span class='keyword'>requires</span> <a href='#concept:uniform_random_bit_generator' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'><span id='conceptref:uniform_random_bit_generator_'><span class='tcode_in_codeblock'>uniform_<span class='shy'></span>random_<span class='shy'></span>bit_<span class='shy'></span>generator</span></span></a><span class='anglebracket'>&lt;</span>remove_cvref_t<span class='anglebracket'>&lt;</span>G<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class='keyword'>constexpr</span> O generate_random<span class='parenthesis'>(</span>O first, S last, G<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> R, <span class='keyword'>class</span> G, <span class='keyword'>class</span> D<span class='anglebracket'>&gt;</span>
      <span class='keyword'>requires</span> <a href='range.refinements#concept:output_range' title='25.4.6&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:output_range_'><span class='tcode_in_codeblock'>output_<span class='shy'></span>range</span></span></a><span class='anglebracket'>&lt;</span>R, invoke_result_t<span class='anglebracket'>&lt;</span>D<span class='operator'>&amp;</span>, G<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='concept.invocable#concept:invocable' title='18.7.2&emsp;Concept invocable&emsp;[concept.invocable]'><span id='conceptref:invocable'><span class='tcode_in_codeblock'>invocable</span></span></a><span class='anglebracket'>&lt;</span>D<span class='operator'>&amp;</span>, G<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               <a href='#concept:uniform_random_bit_generator' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'><span id='conceptref:uniform_random_bit_generator__'><span class='tcode_in_codeblock'>uniform_<span class='shy'></span>random_<span class='shy'></span>bit_<span class='shy'></span>generator</span></span></a><span class='anglebracket'>&lt;</span>remove_cvref_t<span class='anglebracket'>&lt;</span>G<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_arithmetic_v<span class='anglebracket'>&lt;</span>invoke_result_t<span class='anglebracket'>&lt;</span>D<span class='operator'>&amp;</span>, G<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>constexpr</span> borrowed_iterator_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span> generate_random<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> r, G<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g, D<span class='operator'>&amp;</span><span class='operator'>&amp;</span> d<span class='parenthesis'>)</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> G, <span class='keyword'>class</span> D, <a href='iterator.concept.output#concept:output_iterator' title='24.3.4.10&emsp;Concept output_&shy;iterator&emsp;[iterator.concept.output]'><span id='conceptref:output_iterator_'><span class='tcode_in_codeblock'>output_<span class='shy'></span>iterator</span></span></a><span class='anglebracket'>&lt;</span>invoke_result_t<span class='anglebracket'>&lt;</span>D<span class='operator'>&amp;</span>, G<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> O, <a href='iterator.concept.sentinel#concept:sentinel_for' title='24.3.4.7&emsp;Concept sentinel_&shy;for&emsp;[iterator.concept.sentinel]'><span id='conceptref:sentinel_for_'><span class='tcode_in_codeblock'>sentinel_<span class='shy'></span>for</span></span></a><span class='anglebracket'>&lt;</span>O<span class='anglebracket'>&gt;</span> S<span class='anglebracket'>&gt;</span>
      <span class='keyword'>requires</span> <a href='concept.invocable#concept:invocable' title='18.7.2&emsp;Concept invocable&emsp;[concept.invocable]'><span id='conceptref:invocable_'><span class='tcode_in_codeblock'>invocable</span></span></a><span class='anglebracket'>&lt;</span>D<span class='operator'>&amp;</span>, G<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:uniform_random_bit_generator' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'><span id='conceptref:uniform_random_bit_generator___'><span class='tcode_in_codeblock'>uniform_<span class='shy'></span>random_<span class='shy'></span>bit_<span class='shy'></span>generator</span></span></a><span class='anglebracket'>&lt;</span>remove_cvref_t<span class='anglebracket'>&lt;</span>G<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_arithmetic_v<span class='anglebracket'>&lt;</span>invoke_result_t<span class='anglebracket'>&lt;</span>D<span class='operator'>&amp;</span>, G<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>constexpr</span> O generate_random<span class='parenthesis'>(</span>O first, S last, G<span class='operator'>&amp;</span><span class='operator'>&amp;</span> g, D<span class='operator'>&amp;</span><span class='operator'>&amp;</span> d<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>

  <span class='comment'>// <a href='#dist.uni.int' title='29.5.9.2.1&emsp;Class template uniform_&shy;int_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>uni.<span class='shy'></span>int]</a>, class template <span class='tcode_in_codeblock'>uniform_<span class='shy'></span>int_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> IntType <span class='operator'>=</span> <span class='keyword'>int</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> uniform_int_distribution;                             <span class='comment'>// partially freestanding</span>

  <span class='comment'>// <a href='#dist.uni.real' title='29.5.9.2.2&emsp;Class template uniform_&shy;real_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>uni.<span class='shy'></span>real]</a>, class template <span class='tcode_in_codeblock'>uniform_<span class='shy'></span>real_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> uniform_real_distribution;

  <span class='comment'>// <a href='#dist.bern.bernoulli' title='29.5.9.3.1&emsp;Class bernoulli_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>bern.<span class='shy'></span>bernoulli]</a>, class <span class='tcode_in_codeblock'>bernoulli_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>class</span> bernoulli_distribution;

  <span class='comment'>// <a href='#dist.bern.bin' title='29.5.9.3.2&emsp;Class template binomial_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>bern.<span class='shy'></span>bin]</a>, class template <span class='tcode_in_codeblock'>binomial_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> IntType <span class='operator'>=</span> <span class='keyword'>int</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> binomial_distribution;

  <span class='comment'>// <a href='#dist.bern.geo' title='29.5.9.3.3&emsp;Class template geometric_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>bern.<span class='shy'></span>geo]</a>, class template <span class='tcode_in_codeblock'>geometric_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> IntType <span class='operator'>=</span> <span class='keyword'>int</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> geometric_distribution;

  <span class='comment'>// <a href='#dist.bern.negbin' title='29.5.9.3.4&emsp;Class template negative_&shy;binomial_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>bern.<span class='shy'></span>negbin]</a>, class template <span class='tcode_in_codeblock'>negative_<span class='shy'></span>binomial_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> IntType <span class='operator'>=</span> <span class='keyword'>int</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> negative_binomial_distribution;

  <span class='comment'>// <a href='#dist.pois.poisson' title='29.5.9.4.1&emsp;Class template poisson_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>pois.<span class='shy'></span>poisson]</a>, class template <span class='tcode_in_codeblock'>poisson_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> IntType <span class='operator'>=</span> <span class='keyword'>int</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> poisson_distribution;

  <span class='comment'>// <a href='#dist.pois.exp' title='29.5.9.4.2&emsp;Class template exponential_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>pois.<span class='shy'></span>exp]</a>, class template <span class='tcode_in_codeblock'>exponential_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> exponential_distribution;

  <span class='comment'>// <a href='#dist.pois.gamma' title='29.5.9.4.3&emsp;Class template gamma_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>pois.<span class='shy'></span>gamma]</a>, class template <span class='tcode_in_codeblock'>gamma_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> gamma_distribution;

  <span class='comment'>// <a href='#dist.pois.weibull' title='29.5.9.4.4&emsp;Class template weibull_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>pois.<span class='shy'></span>weibull]</a>, class template <span class='tcode_in_codeblock'>weibull_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> weibull_distribution;

  <span class='comment'>// <a href='#dist.pois.extreme' title='29.5.9.4.5&emsp;Class template extreme_&shy;value_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>pois.<span class='shy'></span>extreme]</a>, class template <span class='tcode_in_codeblock'>extreme_<span class='shy'></span>value_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> extreme_value_distribution;

  <span class='comment'>// <a href='#dist.norm.normal' title='29.5.9.5.1&emsp;Class template normal_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>norm.<span class='shy'></span>normal]</a>, class template <span class='tcode_in_codeblock'>normal_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> normal_distribution;

  <span class='comment'>// <a href='#dist.norm.lognormal' title='29.5.9.5.2&emsp;Class template lognormal_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>norm.<span class='shy'></span>lognormal]</a>, class template <span class='tcode_in_codeblock'>lognormal_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> lognormal_distribution;

  <span class='comment'>// <a href='#dist.norm.chisq' title='29.5.9.5.3&emsp;Class template chi_&shy;squared_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>norm.<span class='shy'></span>chisq]</a>, class template <span class='tcode_in_codeblock'>chi_<span class='shy'></span>squared_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> chi_squared_distribution;

  <span class='comment'>// <a href='#dist.norm.cauchy' title='29.5.9.5.4&emsp;Class template cauchy_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>norm.<span class='shy'></span>cauchy]</a>, class template <span class='tcode_in_codeblock'>cauchy_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> cauchy_distribution;

  <span class='comment'>// <a href='#dist.norm.f' title='29.5.9.5.5&emsp;Class template fisher_&shy;f_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>norm.<span class='shy'></span>f]</a>, class template <span class='tcode_in_codeblock'>fisher_<span class='shy'></span>f_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> fisher_f_distribution;

  <span class='comment'>// <a href='#dist.norm.t' title='29.5.9.5.6&emsp;Class template student_&shy;t_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>norm.<span class='shy'></span>t]</a>, class template <span class='tcode_in_codeblock'>student_<span class='shy'></span>t_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> student_t_distribution;

  <span class='comment'>// <a href='#dist.samp.discrete' title='29.5.9.6.1&emsp;Class template discrete_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>samp.<span class='shy'></span>discrete]</a>, class template <span class='tcode_in_codeblock'>discrete_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> IntType <span class='operator'>=</span> <span class='keyword'>int</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> discrete_distribution;

  <span class='comment'>// <a href='#dist.samp.pconst' title='29.5.9.6.2&emsp;Class template piecewise_&shy;constant_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>samp.<span class='shy'></span>pconst]</a>, class template <span class='tcode_in_codeblock'>piecewise_<span class='shy'></span>constant_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> piecewise_constant_distribution;

  <span class='comment'>// <a href='#dist.samp.plinear' title='29.5.9.6.3&emsp;Class template piecewise_&shy;linear_&shy;distribution'>[rand.<span class='shy'></span>dist.<span class='shy'></span>samp.<span class='shy'></span>plinear]</a>, class template <span class='tcode_in_codeblock'>piecewise_<span class='shy'></span>linear_<span class='shy'></span>distribution</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> piecewise_linear_distribution;
<span class='curlybracket'>}</span>
</span>
</div></div><div id='req' class='section'><h3 ><a class='secnum' href='#req' style='min-width:80pt'>29.5.3</a> Requirements <a class='abbr_ref' href='rand.req'>[rand.req]</a></h3><div class='texpara'><a class='index' id=':random_number_generation,requirements'></a></div><div id='req.genl' class='section'><h4 ><a class='secnum' href='#req.genl' style='min-width:95pt'>29.5.3.1</a> General requirements <a class='abbr_ref' href='rand.req.genl'>[rand.req.genl]</a></h4><div class='para' id='req.genl-1'><div class='marginalizedparent'><a class='marginalized' href='#req.genl-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1556'>#</a></div><div class='texpara'><div id='req.genl-1.sentence-1' class='sentence'>Throughout [rand],
the effect of instantiating a template:
<ul class='itemize'><li id='req.genl-1.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.genl-1.1'>(1.1)</a></div><div class='texpara'><div id='req.genl-1.1.sentence-1' class='sentence'>that has a template type parameter
    named <span class='texttt'>Sseq</span>
    is undefined unless the corresponding template argument
    is cv-unqualified and
    meets the requirements
    of <a href='#req.seedseq' title='29.5.3.2&emsp;Seed sequence requirements&emsp;[rand.req.seedseq]'>seed sequence</a><a class='hidden_link' href='#req.genl-1.1.sentence-1'>.</a></div></div></li><li id='req.genl-1.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.genl-1.2'>(1.2)</a></div><div class='texpara'><div id='req.genl-1.2.sentence-1' class='sentence'>that has a template type parameter
    named <span class='texttt'>URBG</span>
    is undefined unless the corresponding template argument
    is cv-unqualified and
    meets the requirements
    of <a href='#req.urng' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'>uniform random bit generator</a><a class='hidden_link' href='#req.genl-1.2.sentence-1'>.</a></div></div></li><li id='req.genl-1.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.genl-1.3'>(1.3)</a></div><div class='texpara'><div id='req.genl-1.3.sentence-1' class='sentence'>that has a template type parameter
    named <span class='texttt'>Engine</span>
    is undefined unless the corresponding template argument
    is cv-unqualified and
    meets the requirements
    of <a href='#req.eng' title='29.5.3.4&emsp;Random number engine requirements&emsp;[rand.req.eng]'>random number engine</a><a class='hidden_link' href='#req.genl-1.3.sentence-1'>.</a></div></div></li><li id='req.genl-1.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.genl-1.4'>(1.4)</a></div><div class='texpara'><div id='req.genl-1.4.sentence-1' class='sentence'>that has a template type parameter
    named <span class='texttt'>RealType</span>
    is undefined unless the corresponding template argument
    is cv-unqualified and
    is one of
    <span class='texttt'><span class='keyword'>float</span></span>, <span class='texttt'><span class='keyword'>double</span></span>, or <span class='texttt'><span class='keyword'>long</span> <span class='keyword'>double</span></span><a class='hidden_link' href='#req.genl-1.4.sentence-1'>.</a></div></div></li><li id='req.genl-1.5'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.genl-1.5'>(1.5)</a></div><div class='texpara'><div id='req.genl-1.5.sentence-1' class='sentence'>that has a template type parameter
    named <span class='texttt'>IntType</span>
    is undefined unless the corresponding template argument
    is cv-unqualified and
    is one of
      <span class='texttt'><span class='keyword'>short</span></span>,
      <span class='texttt'><span class='keyword'>int</span></span>,
      <span class='texttt'><span class='keyword'>long</span></span>,
      <span class='texttt'><span class='keyword'>long</span> <span class='keyword'>long</span></span>,
      <span class='texttt'><span class='keyword'>unsigned</span> <span class='keyword'>short</span></span>,
      <span class='texttt'><span class='keyword'>unsigned</span> <span class='keyword'>int</span></span>,
      <span class='texttt'><span class='keyword'>unsigned</span> <span class='keyword'>long</span></span>,
      or
      <span class='texttt'><span class='keyword'>unsigned</span> <span class='keyword'>long</span> <span class='keyword'>long</span></span><a class='hidden_link' href='#req.genl-1.5.sentence-1'>.</a></div></div></li><li id='req.genl-1.6'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.genl-1.6'>(1.6)</a></div><div class='texpara'><div id='req.genl-1.6.sentence-1' class='sentence'>that has a template type parameter
    named <span class='texttt'>UIntType</span>
    is undefined unless the corresponding template argument
    is cv-unqualified and
    is one of
      <span class='texttt'><span class='keyword'>unsigned</span> <span class='keyword'>short</span></span>,
      <span class='texttt'><span class='keyword'>unsigned</span> <span class='keyword'>int</span></span>,
      <span class='texttt'><span class='keyword'>unsigned</span> <span class='keyword'>long</span></span>,
      or
      <span class='texttt'><span class='keyword'>unsigned</span> <span class='keyword'>long</span> <span class='keyword'>long</span></span><a class='hidden_link' href='#req.genl-1.6.sentence-1'>.</a></div></div></li></ul></div></div></div><div class='para' id='req.genl-2'><div class='marginalizedparent'><a class='marginalized' href='#req.genl-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1616'>#</a></div><div class='texpara'><div id='req.genl-2.sentence-1' class='sentence'>Throughout [rand],
phrases of the form “<span class='texttt'>x</span> is an iterator of a specific kind”
shall be interpreted as equivalent to the more formal requirement that
“<span class='texttt'>x</span> is a value
of a type meeting the requirements
of the specified iterator type”<a class='hidden_link' href='#req.genl-2.sentence-1'>.</a></div></div></div><div class='para' id='req.genl-3'><div class='marginalizedparent'><a class='marginalized' href='#req.genl-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1624'>#</a></div><div class='texpara'><div id='req.genl-3.sentence-1' class='sentence'>Throughout [rand],
any constructor that can be called with a single argument
and that meets a requirement specified in this subclause
shall be declared <span id=':explicit'><span class='texttt'><span class='keyword'>explicit</span></span></span><a class='hidden_link' href='#req.genl-3.sentence-1'>.</a></div></div></div></div><div id='req.seedseq' class='section'><h4 ><a class='secnum' href='#req.seedseq' style='min-width:95pt'>29.5.3.2</a> Seed sequence requirements <a class='abbr_ref' href='rand.req.seedseq'>[rand.req.seedseq]</a></h4><div class='texpara'><a class='index' id=':seed_sequence,requirements'></a><a class='index' id=':requirements,seed_sequence'></a></div><div class='para' id='req.seedseq-1'><div class='marginalizedparent'><a class='marginalized' href='#req.seedseq-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1637'>#</a></div><div class='texpara'><div id='req.seedseq-1.sentence-1' class='sentence'>A <a class='hidden_link' href='#def:seed_sequence' title='29.5.3.2&emsp;Seed sequence requirements&emsp;[rand.req.seedseq]'><span id='def:seed_sequence'><i >seed sequence</i></span></a>
 is an object
 that consumes a sequence
 of integer-valued data
 and produces a requested number
 of unsigned integer values <span class='math'><span class='mathalpha'>i</span></span>, <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≤</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-msubsup MJXc-space3"><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-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;">32</span></span></span></span></span></span></span></span></span></span>,
 based on the consumed data<a class='hidden_link' href='#req.seedseq-1.sentence-1'>.</a></div> <div id='req.seedseq-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#req.seedseq-note-1'>1</a></i>:&ensp;<div id='req.seedseq-1.sentence-2' class='sentence'>Such an object provides a mechanism
 to avoid replication of streams of random variates<a class='hidden_link' href='#req.seedseq-1.sentence-2'>.</a></div> <div id='req.seedseq-1.sentence-3' class='sentence'>This can be useful, for example, in applications
 requiring large numbers of random number engines<a class='hidden_link' href='#req.seedseq-1.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='req.seedseq-2'><div class='marginalizedparent'><a class='marginalized' href='#req.seedseq-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1652'>#</a></div><div class='texpara'><div id='req.seedseq-2.sentence-1' class='sentence'>A class <span class='texttt'>S</span>
meets the requirements
of a seed sequence
if the expressions shown
in Table <a href='#tab:rand.req.seedseq' title='Table 124: Seed sequence requirements'>124</a>
are valid and have the indicated semantics,
and if <span class='texttt'>S</span> also meets all other requirements
of <a href='#req.seedseq' title='29.5.3.2&emsp;Seed sequence requirements'>[rand.<span class='shy'></span>req.<span class='shy'></span>seedseq]</a><a class='hidden_link' href='#req.seedseq-2.sentence-1'>.</a></div> <div id='req.seedseq-2.sentence-2' class='sentence'>In Table <a href='#tab:rand.req.seedseq' title='Table 124: Seed sequence requirements'>124</a> and throughout this subclause:
<ul class='itemize'><li id='req.seedseq-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.seedseq-2.1'>(2.1)</a></div><span class='texttt'>T</span> is the type named by
    <span class='texttt'>S</span>'s associated <span class='texttt'>result_<span class='shy'></span>type</span>;</li><li id='req.seedseq-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.seedseq-2.2'>(2.2)</a></div><span class='texttt'>q</span> is a value of type <span class='texttt'>S</span>
    and
    <span class='texttt'>r</span> is a value of type <span class='texttt'>S</span> or <span class='texttt'><span class='keyword'>const</span> S</span>;</li><li id='req.seedseq-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.seedseq-2.3'>(2.3)</a></div><span class='texttt'>ib</span> and <span class='texttt'>ie</span> are input iterators
    with an unsigned integer <span class='texttt'>value_<span class='shy'></span>type</span> of at least 32 bits;</li><li id='req.seedseq-2.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.seedseq-2.4'>(2.4)</a></div><span class='texttt'>rb</span> and <span class='texttt'>re</span> are mutable random access iterators
    with an unsigned integer <span class='texttt'>value_<span class='shy'></span>type</span> of at least 32 bits;</li><li id='req.seedseq-2.5'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.seedseq-2.5'>(2.5)</a></div><span class='texttt'>ob</span> is an output iterator;
  and</li><li id='req.seedseq-2.6'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.seedseq-2.6'>(2.6)</a></div><span class='texttt'>il</span> is a value of type <span class='texttt'>initializer_<span class='shy'></span>list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#req.seedseq-2.sentence-2'>.</a></li></ul></div></div><div class='texpara'><div class='numberedTable' id='tab:rand.req.seedseq'>Table <a href='#tab:rand.req.seedseq'>124</a> &mdash; Seed sequence requirements&emsp;<a href='./tab:rand.req.seedseq'>[tab:rand.req.seedseq]</a><br><table ><tr id='tab:rand.req.seedseq-row-1' class='rowsep'><td class='center'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.seedseq-row-1'>🔗</a></div><div class='texpara'><div id='tab:rand.req.seedseq-row-1-column-1-sentence-1' class='sentence'><b>Expression</b></div></div></td><td class='center'><div class='texpara'><div id='tab:rand.req.seedseq-row-1-column-2-sentence-1' class='sentence'><b>Return type</b></div></div></td><td class='center'><div class='texpara'><div id='tab:rand.req.seedseq-row-1-column-3-sentence-1' class='sentence'><b>Pre/post-condition</b></div></div></td><td class='center'><div class='texpara'><div id='tab:rand.req.seedseq-row-1-column-4-sentence-1' class='sentence'><b>Complexity</b></div></div></td></tr><tr id='tab:rand.req.seedseq-row-2' class='capsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.seedseq-row-2'>🔗</a></div><div class='texpara'><div id='tab:rand.req.seedseq-row-2-column-1-sentence-1' class='sentence'><span class='texttt'>S<span class='operator'>&#x200b;::&#x200b;</span>result_<span class='shy'></span>type</span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.seedseq-row-2-column-2-sentence-1' class='sentence'><span class='texttt'>T</span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.seedseq-row-2-column-3-sentence-1' class='sentence'><span class='texttt'>T</span> is an <a href='basic.fundamental#def:type,unsigned_integer' title='6.8.2&emsp;Fundamental types&emsp;[basic.fundamental]'>unsigned integer type</a>
    of at least 32 bits<a class='hidden_link' href='#tab:rand.req.seedseq-row-2-column-3-sentence-1'>.</a></div></div></td><td class='empty left' style='width:15%'></td></tr><tr id='tab:rand.req.seedseq-row-3' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.seedseq-row-3'>🔗</a></div><div class='texpara'><div id='tab:rand.req.seedseq-row-3-column-1-sentence-1' class='sentence'><span class='texttt'>S<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></div></div></td><td class='empty left' style='width:22%'></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.seedseq-row-3-column-3-sentence-1' class='sentence'>Creates a seed sequence
    with the same initial state as all other default-constructed seed sequences
    of type <span class='texttt'>S</span><a class='hidden_link' href='#tab:rand.req.seedseq-row-3-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.seedseq-row-3-column-4-sentence-1' class='sentence'>constant</div></div></td></tr><tr id='tab:rand.req.seedseq-row-4' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.seedseq-row-4'>🔗</a></div><div class='texpara'><div id='tab:rand.req.seedseq-row-4-column-1-sentence-1' class='sentence'><span class='texttt'>S<span class='parenthesis'>(</span>ib,ie<span class='parenthesis'>)</span></span></div></div></td><td class='empty left' style='width:22%'></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.seedseq-row-4-column-3-sentence-1' class='sentence'>Creates a seed sequence
    having internal state
    that depends on some or all of the bits
    of the supplied sequence <span class='math'>[<span class='texttt'>ib</span>,<span class='texttt'>ie</span>)</span><a class='hidden_link' href='#tab:rand.req.seedseq-row-4-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><span class='math'><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-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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;">ie</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-texatom MJXc-space2"><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;">ib</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><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></span></div></td></tr><tr id='tab:rand.req.seedseq-row-5' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.seedseq-row-5'>🔗</a></div><div class='texpara'><div id='tab:rand.req.seedseq-row-5-column-1-sentence-1' class='sentence'><span class='texttt'>S<span class='parenthesis'>(</span>il<span class='parenthesis'>)</span></span></div></div></td><td class='empty left' style='width:22%'></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.seedseq-row-5-column-3-sentence-1' class='sentence'>Same as <span class='texttt'>S<span class='parenthesis'>(</span>il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#tab:rand.req.seedseq-row-5-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.seedseq-row-5-column-4-sentence-1' class='sentence'>same as <span class='texttt'>S<span class='parenthesis'>(</span>il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span></div></div></td></tr><tr id='tab:rand.req.seedseq-row-6' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.seedseq-row-6'>🔗</a></div><div class='texpara'><div id='tab:rand.req.seedseq-row-6-column-1-sentence-1' class='sentence'><span class='texttt'>q<span class='operator'>.</span>generate<span class='parenthesis'>(</span>rb,re<span class='parenthesis'>)</span></span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.seedseq-row-6-column-2-sentence-1' class='sentence'><span id=':void'><span class='texttt'><span class='keyword'>void</span></span></span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.seedseq-row-6-column-3-sentence-1' class='sentence'>Does nothing if <span class='texttt'>rb <span class='operator'>=</span><span class='operator'>=</span> re</span><a class='hidden_link' href='#tab:rand.req.seedseq-row-6-column-3-sentence-1'>.</a></div> <div id='tab:rand.req.seedseq-row-6-column-3-sentence-2' class='sentence'>Otherwise,
    fills the supplied sequence <span class='math'>[<span class='texttt'>rb</span>,<span class='texttt'>re</span>)</span>
    with 32-bit quantities
    that depend on the sequence supplied to the constructor
    and possibly also depend on the history
    of <span class='texttt'>generate</span>'s previous invocations<a class='hidden_link' href='#tab:rand.req.seedseq-row-6-column-3-sentence-2'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><span class='math'><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-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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.225em; padding-bottom: 0.298em;">re</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-texatom MJXc-space2"><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;">rb</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><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></span></div></td></tr><tr id='tab:rand.req.seedseq-row-7' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.seedseq-row-7'>🔗</a></div><div class='texpara'><div id='tab:rand.req.seedseq-row-7-column-1-sentence-1' class='sentence'><span class='texttt'>r<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.seedseq-row-7-column-2-sentence-1' class='sentence'><span class='texttt'>size_<span class='shy'></span>t</span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.seedseq-row-7-column-3-sentence-1' class='sentence'>The number of 32-bit units
    that would be copied
    by a call to <span class='texttt'>r<span class='operator'>.</span>param</span><a class='hidden_link' href='#tab:rand.req.seedseq-row-7-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.seedseq-row-7-column-4-sentence-1' class='sentence'>constant</div></div></td></tr><tr id='tab:rand.req.seedseq-row-8' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.seedseq-row-8'>🔗</a></div><div class='texpara'><div id='tab:rand.req.seedseq-row-8-column-1-sentence-1' class='sentence'><span class='texttt'><span class='texttt'>r<span class='operator'>.</span>param<span class='parenthesis'>(</span>ob<span class='parenthesis'>)</span></span></span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.seedseq-row-8-column-2-sentence-1' class='sentence'><span id=':void_'><span class='texttt'><span class='keyword'>void</span></span></span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.seedseq-row-8-column-3-sentence-1' class='sentence'>Copies to the given destination
    a sequence of 32-bit units
    that can be provided
    to the constructor of a second object of type <span class='texttt'>S</span>,
    and that would reproduce in that second object
    a state indistinguishable
    from the state of the first object<a class='hidden_link' href='#tab:rand.req.seedseq-row-8-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><span class='math'><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-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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.519em; padding-bottom: 0.372em;">r<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><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></span></div></td></tr></table></div></div><div class='texpara'>
</div></div></div><div id='req.urng' class='section'><h4 ><a class='secnum' href='#req.urng' style='min-width:95pt'>29.5.3.3</a> Uniform random bit generator requirements <a class='abbr_ref' href='rand.req.urng'>[rand.req.urng]</a></h4><div class='texpara'><a class='index' id=':uniform_random_bit_generator,requirements'></a><a class='index' id=':requirements,uniform_random_bit_generator'></a></div><div class='para' id='req.urng-1'><div class='marginalizedparent'><a class='marginalized' href='#req.urng-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1770'>#</a></div><div class='texpara'><div id='req.urng-1.sentence-1' class='sentence'>A <a class='hidden_link' href='#def:uniform_random_bit_generator' id='def:uniform_random_bit_generator'><i>uniform random bit generator</i></a>
<span class='texttt'>g</span> of type <span class='texttt'>G</span>
is a function object
returning unsigned integer values
such that each value
in the range of possible results
has (ideally) equal probability
of being returned<a class='hidden_link' href='#req.urng-1.sentence-1'>.</a></div> <div id='req.urng-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#req.urng-note-1'>1</a></i>:&ensp;<div id='req.urng-1.sentence-2' class='sentence'>The degree to which <span class='texttt'>g</span>'s results
 approximate the ideal
 is often determined statistically<a class='hidden_link' href='#req.urng-1.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div><div class='texpara'><span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> G<span class='anglebracket'>&gt;</span>
  <span class='keyword'>concept</span> <a class='hidden_link' href='#concept:uniform_random_bit_generator' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'><span id='concept:uniform_random_bit_generator'><span id='lib:uniform_random_bit_generator'><span class='tcode_in_codeblock'>uniform_<span class='shy'></span>random_<span class='shy'></span>bit_<span class='shy'></span>generator</span></span></span></a> <span class='operator'>=</span>
    <a href='concept.invocable#concept:invocable' title='18.7.2&emsp;Concept invocable&emsp;[concept.invocable]'><span id='conceptref:invocable__'><span class='tcode_in_codeblock'>invocable</span></span></a><span class='anglebracket'>&lt;</span>G<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='concepts.arithmetic#concept:unsigned_integral' title='18.4.7&emsp;Arithmetic concepts&emsp;[concepts.arithmetic]'><span id='conceptref:unsigned_integral'><span class='tcode_in_codeblock'>unsigned_<span class='shy'></span>integral</span></span></a><span class='anglebracket'>&lt;</span>invoke_result_t<span class='anglebracket'>&lt;</span>G<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
    <span class='keyword'>requires</span> <span class='curlybracket'>{</span>
      <span class='curlybracket'>{</span> G<span class='operator'>::</span>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> <a href='concept.same#concept:same_as' title='18.4.2&emsp;Concept same_&shy;as&emsp;[concept.same]'><span id='conceptref:same_as'><span class='tcode_in_codeblock'>same_<span class='shy'></span>as</span></span></a><span class='anglebracket'>&lt;</span>invoke_result_t<span class='anglebracket'>&lt;</span>G<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
      <span class='curlybracket'>{</span> G<span class='operator'>::</span>max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> <a href='concept.same#concept:same_as' title='18.4.2&emsp;Concept same_&shy;as&emsp;[concept.same]'><span id='conceptref:same_as_'><span class='tcode_in_codeblock'>same_<span class='shy'></span>as</span></span></a><span class='anglebracket'>&lt;</span>invoke_result_t<span class='anglebracket'>&lt;</span>G<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
      <span class='keyword'>requires</span> bool_constant<span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>G<span class='operator'>::</span>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='anglebracket'>&lt;</span> G<span class='operator'>::</span>max<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='operator'>::</span>value;
    <span class='curlybracket'>}</span>;
</span></div></div><div class='para' id='req.urng-2'><div class='marginalizedparent'><a class='marginalized' href='#req.urng-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1796'>#</a></div><div class='texpara'><div id='req.urng-2.sentence-1' class='sentence'>Let <span class='texttt'>g</span> be an object of type <span class='texttt'>G</span><a class='hidden_link' href='#req.urng-2.sentence-1'>.</a></div> <div id='req.urng-2.sentence-2' class='sentence'><span class='texttt'>G</span> models
<a href='#concept:uniform_random_bit_generator' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'><span id='conceptref:uniform_random_bit_generator____'><span class='texttt'>uniform_<span class='shy'></span>random_<span class='shy'></span>bit_<span class='shy'></span>generator</span></span></a> only if
<ul class='itemize'><li id='req.urng-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.urng-2.1'>(2.1)</a></div><span class='texttt'>G<span class='operator'>&#x200b;::&#x200b;</span>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='anglebracket'>&lt;</span><span class='operator'>=</span> g<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>,</li><li id='req.urng-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.urng-2.2'>(2.2)</a></div><span class='texttt'>g<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='anglebracket'>&lt;</span><span class='operator'>=</span> G<span class='operator'>&#x200b;::&#x200b;</span>max<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>, and</li><li id='req.urng-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.urng-2.3'>(2.3)</a></div><span class='texttt'>g<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> has amortized constant complexity<a class='hidden_link' href='#req.urng-2.sentence-2'>.</a></li></ul></div> </div></div><div class='para' id='req.urng-3'><div class='marginalizedparent'><a class='marginalized' href='#req.urng-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1807'>#</a></div><div class='texpara'><div id='req.urng-3.sentence-1' class='sentence'>A class <span class='texttt'>G</span> meets the <a class='hidden_link' href='#def:uniform_random_bit_generator' id='def:uniform_random_bit_generator'><i>uniform random bit generator</i></a> requirements if
<span class='texttt'>G</span> models <a href='#concept:uniform_random_bit_generator' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'><span id='conceptref:uniform_random_bit_generator_____'><span class='texttt'>uniform_<span class='shy'></span>random_<span class='shy'></span>bit_<span class='shy'></span>generator</span></span></a>,
<span class='texttt'>invoke_<span class='shy'></span>result_<span class='shy'></span>t<span class='anglebracket'>&lt;</span>G<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span></span> is an unsigned integer type (<a href='basic.fundamental' title='6.8.2&emsp;Fundamental types'>[basic.<span class='shy'></span>fundamental]</a>),
and
<span class='texttt'>G</span> provides a nested <a href='dcl.typedef#nt:typedef-name' title='9.2.4&emsp;The typedef specifier&emsp;[dcl.typedef]'><span id='ntref:typedef-name'><span class='textsf'><i >typedef-name</i></span></span></a> <span class='texttt'>result_<span class='shy'></span>type</span>
that denotes the same type as <span class='texttt'>invoke_<span class='shy'></span>result_<span class='shy'></span>t<span class='anglebracket'>&lt;</span>G<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#req.urng-3.sentence-1'>.</a></div></div></div></div><div id='req.eng' class='section'><h4 ><a class='secnum' href='#req.eng' style='min-width:95pt'>29.5.3.4</a> Random number engine requirements <a class='abbr_ref' href='rand.req.eng'>[rand.req.eng]</a></h4><div class='texpara'><a class='index' id=':random_number_engine,requirements'></a><a class='index' id=':requirements,random_number_engine'></a></div><div class='para' id='req.eng-1'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1823'>#</a></div><div class='texpara'><div id='req.eng-1.sentence-1' class='sentence'>A <a class='hidden_link' href='#def:random_number_engine' id='def:random_number_engine'><i>random number engine</i></a>
(commonly shortened to <a class='hidden_link' href='#def:engine' id='def:engine'><i>engine</i></a>)
<span class='texttt'>e</span> of type <span class='texttt'>E</span>
is a uniform random bit generator
that additionally meets the requirements
(e.g., for seeding and for input/output)
specified in this subclause<a class='hidden_link' href='#req.eng-1.sentence-1'>.</a></div></div></div><div class='para' id='req.eng-2'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1832'>#</a></div><div class='texpara'><div id='req.eng-2.sentence-1' class='sentence'>At any given time,
<span class='texttt'>e</span> has a state <span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span>
for some integer <span class='math'><span class='mathalpha'>i</span> &ensp;≥&ensp;0</span><a class='hidden_link' href='#req.eng-2.sentence-1'>.</a></div> <div id='req.eng-2.sentence-2' class='sentence'>Upon construction,
<span class='texttt'>e</span>
has an initial state <span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span></span></span></span></span></span></span><a class='hidden_link' href='#req.eng-2.sentence-2'>.</a></div> <div id='req.eng-2.sentence-3' class='sentence'>An engine's state may be established via
 a constructor,
 a <span class='texttt'>seed</span> function,
 assignment,
 or a suitable <span class='texttt'><span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#req.eng-2.sentence-3'>.</a></div></div></div><div class='para' id='req.eng-3'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1845'>#</a></div><div class='texpara'><div id='req.eng-3.sentence-1' class='sentence'><span class='texttt'>E</span>'s specification shall define:
<ul class='itemize'><li id='req.eng-3.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.eng-3.1'>(3.1)</a></div>the size of <span class='texttt'>E</span>'s state
   in multiples of the size of <span class='texttt'>result_<span class='shy'></span>type</span>,
   given as an integral constant expression;</li><li id='req.eng-3.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.eng-3.2'>(3.2)</a></div>the <a class='hidden_link' href='#def:transition_algorithm' id='def:transition_algorithm'><i>transition algorithm</i></a>
   <span class='math'><span class='mathsf'>TA</span></span>
   by which <span class='texttt'>e</span>'s state <span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span>
   is advanced to its <a class='hidden_link' href='#def:successor_state' id='def:successor_state'><i>successor state</i></a>
   <span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span></span></span></span></span>;
 and</li><li id='req.eng-3.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.eng-3.3'>(3.3)</a></div>the <a class='hidden_link' href='#def:generation_algorithm' id='def:generation_algorithm'><i>generation algorithm</i></a>
   <span class='math'><span class='mathsf'>GA</span></span>
   by which an engine's state is mapped
   to a value of type <span class='texttt'>result_<span class='shy'></span>type</span><a class='hidden_link' href='#req.eng-3.sentence-1'>.</a></li></ul></div></div></div><div class='para' id='req.eng-4'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L1866'>#</a></div><div class='texpara'><div id='req.eng-4.sentence-1' class='sentence'>A class <span class='texttt'>E</span>
that meets the requirements
of a <a href='#req.urng' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'>uniform random bit generator</a>
also meets the requirements
of a <a class='hidden_link' href='#def:random_number_engine' id='def:random_number_engine'><i>random number engine</i></a>
if the expressions shown
in Table <a href='#tab:rand.req.eng' title='Table 125: Random number engine requirements'>125</a>
are valid and have the indicated semantics,
and if <span class='texttt'>E</span> also meets all other requirements
of <a href='#req.eng' title='29.5.3.4&emsp;Random number engine requirements'>[rand.<span class='shy'></span>req.<span class='shy'></span>eng]</a><a class='hidden_link' href='#req.eng-4.sentence-1'>.</a></div> <div id='req.eng-4.sentence-2' class='sentence'>In Table <a href='#tab:rand.req.eng' title='Table 125: Random number engine requirements'>125</a> and throughout this subclause:
<ul class='itemize'><li id='req.eng-4.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.eng-4.1'>(4.1)</a></div><span class='texttt'>T</span> is the type named by
    <span class='texttt'>E</span>'s associated <span class='texttt'>result_<span class='shy'></span>type</span>;</li><li id='req.eng-4.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.eng-4.2'>(4.2)</a></div><span class='texttt'>e</span> is a value of <span class='texttt'>E</span>,
    <span class='texttt'>v</span> is an lvalue of <span class='texttt'>E</span>,
    <span class='texttt'>x</span> and <span class='texttt'>y</span> are (possibly const) values of <span class='texttt'>E</span>;</li><li id='req.eng-4.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.eng-4.3'>(4.3)</a></div><span class='texttt'>s</span> is a value of <span class='texttt'>T</span>;</li><li id='req.eng-4.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.eng-4.4'>(4.4)</a></div><span class='texttt'>q</span> is an lvalue
    meeting the requirements of a <a href='#req.seedseq' title='29.5.3.2&emsp;Seed sequence requirements&emsp;[rand.req.seedseq]'>seed sequence</a>;</li><li id='req.eng-4.5'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.eng-4.5'>(4.5)</a></div><span class='texttt'>z</span> is a value
    of type <span class='texttt'><span class='keyword'>unsigned</span> <span class='keyword'>long</span> <span class='keyword'>long</span></span>;</li><li id='req.eng-4.6'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.eng-4.6'>(4.6)</a></div><span class='texttt'>os</span> is an lvalue of the type of some class template specialization
    <span class='texttt'>basic_<span class='shy'></span>ostream<span class='anglebracket'>&lt;</span>charT,</span> <span class='texttt'>traits<span class='anglebracket'>&gt;</span></span>;
  and</li><li id='req.eng-4.7'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.eng-4.7'>(4.7)</a></div><span class='texttt'>is</span> is an lvalue of the type of some class template specialization
    <span class='texttt'>basic_<span class='shy'></span>istream<span class='anglebracket'>&lt;</span>charT,</span> <span class='texttt'>traits<span class='anglebracket'>&gt;</span></span>;</li></ul>
where <span class='texttt'>charT</span> and <span class='texttt'>traits</span> are constrained
according to <a href='strings' title='27&emsp;Strings library'>[strings]</a> and <a href='input.output' title='31&emsp;Input/output library'>[input.<span class='shy'></span>output]</a><a class='hidden_link' href='#req.eng-4.sentence-2'>.</a></div></div><div class='texpara'><div class='numberedTable' id='tab:rand.req.eng'>Table <a href='#tab:rand.req.eng'>125</a> &mdash; Random number engine requirements&emsp;<a href='./tab:rand.req.eng'>[tab:rand.req.eng]</a><br><table ><tr id='tab:rand.req.eng-row-1' class='rowsep'><td class='center'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.eng-row-1'>🔗</a></div><div class='texpara'><div id='tab:rand.req.eng-row-1-column-1-sentence-1' class='sentence'><b>Expression</b></div></div></td><td class='center'><div class='texpara'><div id='tab:rand.req.eng-row-1-column-2-sentence-1' class='sentence'><b>Return type</b></div></div></td><td class='center'><div class='texpara'><div id='tab:rand.req.eng-row-1-column-3-sentence-1' class='sentence'><b>Pre/post-condition</b></div></div></td><td class='center'><div class='texpara'><div id='tab:rand.req.eng-row-1-column-4-sentence-1' class='sentence'><b>Complexity</b></div></div></td></tr><tr id='tab:rand.req.eng-row-2' class='capsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.eng-row-2'>🔗</a></div><div class='texpara'><div id='tab:rand.req.eng-row-2-column-1-sentence-1' class='sentence'><span class='texttt'>E<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></div></div></td><td class='empty left' style='width:22%'></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.eng-row-2-column-3-sentence-1' class='sentence'>Creates an engine
    with the same initial state
    as all other default-constructed engines
    of type <span class='texttt'>E</span><a class='hidden_link' href='#tab:rand.req.eng-row-2-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><span class='math'><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-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;">size of state</span></span><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></span></div></td></tr><tr id='tab:rand.req.eng-row-3' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.eng-row-3'>🔗</a></div><div class='texpara'><div id='tab:rand.req.eng-row-3-column-1-sentence-1' class='sentence'><span class='texttt'>E<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span></span></div></div></td><td class='empty left' style='width:22%'></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.eng-row-3-column-3-sentence-1' class='sentence'>Creates an engine
    that compares equal to <span class='texttt'>x</span><a class='hidden_link' href='#tab:rand.req.eng-row-3-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><span class='math'><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-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;">size of state</span></span><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></span></div></td></tr><tr id='tab:rand.req.eng-row-4' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.eng-row-4'>🔗</a></div><div class='texpara'><div id='tab:rand.req.eng-row-4-column-1-sentence-1' class='sentence'><span class='texttt'>E<span class='parenthesis'>(</span>s<span class='parenthesis'>)</span></span></div></div></td><td class='empty left' style='width:22%'></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.eng-row-4-column-3-sentence-1' class='sentence'>Creates an engine
      with initial state determined by <span class='texttt'>s</span><a class='hidden_link' href='#tab:rand.req.eng-row-4-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><span class='math'><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-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;">size of state</span></span><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></span></div></td></tr><tr id='tab:rand.req.eng-row-5' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.eng-row-5'>🔗</a></div><div class='texpara'><div id='tab:rand.req.eng-row-5-column-1-sentence-1' class='sentence'><span class='texttt'>E<span class='parenthesis'>(</span>q<span class='parenthesis'>)</span></span><a class='footnoteref' href='#footnote-241' id='footnoteref-241' title='This constructor (as well as the subsequent corresponding seed() function) can be particularly useful to applications requiring a large number of independent random sequences.'>241</a></div></div></td><td class='empty left' style='width:22%'></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.eng-row-5-column-3-sentence-1' class='sentence'>Creates an engine
    with an initial state
    that depends on a sequence
    produced by one call
    to <span class='texttt'>q<span class='operator'>.</span>generate</span><a class='hidden_link' href='#tab:rand.req.eng-row-5-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.eng-row-5-column-4-sentence-1' class='sentence'>same as complexity of <span class='texttt'>q<span class='operator'>.</span>generate</span>
    called on a sequence
    whose length is size of state</div></div></td></tr><tr id='tab:rand.req.eng-row-6' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.eng-row-6'>🔗</a></div><div class='texpara'><div id='tab:rand.req.eng-row-6-column-1-sentence-1' class='sentence'><span class='texttt'>e<span class='operator'>.</span>seed<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.eng-row-6-column-2-sentence-1' class='sentence'><span id=':void__'><span class='texttt'><span class='keyword'>void</span></span></span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.eng-row-6-column-3-sentence-1' class='sentence'><i >Postconditions</i>: <span class='texttt'>e <span class='operator'>=</span><span class='operator'>=</span> E<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#tab:rand.req.eng-row-6-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.eng-row-6-column-4-sentence-1' class='sentence'>same as <span class='texttt'>E<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></div></div></td></tr><tr id='tab:rand.req.eng-row-7' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.eng-row-7'>🔗</a></div><div class='texpara'><div id='tab:rand.req.eng-row-7-column-1-sentence-1' class='sentence'><span class='texttt'>e<span class='operator'>.</span>seed<span class='parenthesis'>(</span>s<span class='parenthesis'>)</span></span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.eng-row-7-column-2-sentence-1' class='sentence'><span id=':void___'><span class='texttt'><span class='keyword'>void</span></span></span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.eng-row-7-column-3-sentence-1' class='sentence'><i >Postconditions</i>: <span class='texttt'>e <span class='operator'>=</span><span class='operator'>=</span> E<span class='parenthesis'>(</span>s<span class='parenthesis'>)</span></span><a class='hidden_link' href='#tab:rand.req.eng-row-7-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.eng-row-7-column-4-sentence-1' class='sentence'>same as <span class='texttt'>E<span class='parenthesis'>(</span>s<span class='parenthesis'>)</span></span></div></div></td></tr><tr id='tab:rand.req.eng-row-8' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.eng-row-8'>🔗</a></div><div class='texpara'><div id='tab:rand.req.eng-row-8-column-1-sentence-1' class='sentence'><span class='texttt'>e<span class='operator'>.</span>seed<span class='parenthesis'>(</span>q<span class='parenthesis'>)</span></span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.eng-row-8-column-2-sentence-1' class='sentence'><span id=':void____'><span class='texttt'><span class='keyword'>void</span></span></span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.eng-row-8-column-3-sentence-1' class='sentence'><i >Postconditions</i>: <span class='texttt'>e <span class='operator'>=</span><span class='operator'>=</span> E<span class='parenthesis'>(</span>q<span class='parenthesis'>)</span></span><a class='hidden_link' href='#tab:rand.req.eng-row-8-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.eng-row-8-column-4-sentence-1' class='sentence'>same as <span class='texttt'>E<span class='parenthesis'>(</span>q<span class='parenthesis'>)</span></span></div></div></td></tr><tr id='tab:rand.req.eng-row-9' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.eng-row-9'>🔗</a></div><div class='texpara'><div id='tab:rand.req.eng-row-9-column-1-sentence-1' class='sentence'><span class='texttt'>e<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.eng-row-9-column-2-sentence-1' class='sentence'><span class='texttt'>T</span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.eng-row-9-column-3-sentence-1' class='sentence'>Advances <span class='texttt'>e</span>'s state <span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span> to
      <span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span></span></span></span></span> <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">T</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">A</span></span></span></span><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></span><span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span><span class='math'>)</span>
    and returns
      <span class='math'><span class='mathsf'>GA</span>(</span><span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span><span class='math'>)</span><a class='hidden_link' href='#tab:rand.req.eng-row-9-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.eng-row-9-column-4-sentence-1' class='sentence'>per <a href='#req.urng' title='29.5.3.3&emsp;Uniform random bit generator requirements'>[rand.<span class='shy'></span>req.<span class='shy'></span>urng]</a></div></div></td></tr><tr id='tab:rand.req.eng-row-10' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.eng-row-10'>🔗</a></div><div class='texpara'><div id='tab:rand.req.eng-row-10-column-1-sentence-1' class='sentence'><span class='texttt'>e<span class='operator'>.</span>discard<span class='parenthesis'>(</span>z<span class='parenthesis'>)</span></span><a class='footnoteref' href='#footnote-242' id='footnoteref-242' title='This operation is common in user code, and can often be implemented in an engine-specific manner so as to provide significant performance improvements over an equivalent naive loop that makes z consecutive calls e().'>242</a></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.eng-row-10-column-2-sentence-1' class='sentence'><span id=':void_____'><span class='texttt'><span class='keyword'>void</span></span></span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.eng-row-10-column-3-sentence-1' class='sentence'>Advances <span class='texttt'>e</span>'s state <span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span>
      to <span class='math'><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.225em; padding-bottom: 0.298em;">e</span></span></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</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.225em; padding-bottom: 0.225em;">z</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span></span></span></span></span>
      by any means equivalent to <span class='texttt'>z</span> consecutive calls <span class='texttt'>e<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#tab:rand.req.eng-row-10-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.eng-row-10-column-4-sentence-1' class='sentence'>no worse than the complexity
    of <span class='texttt'>z</span> consecutive calls <span class='texttt'>e<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></div></div></td></tr><tr id='tab:rand.req.eng-row-11' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.eng-row-11'>🔗</a></div><div class='texpara'><div id='tab:rand.req.eng-row-11-column-1-sentence-1' class='sentence'><span class='texttt'>x <span class='operator'>=</span><span class='operator'>=</span> y</span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.eng-row-11-column-2-sentence-1' class='sentence'><span class='texttt'><span class='keyword'>bool</span></span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.eng-row-11-column-3-sentence-1' class='sentence'>This operator is an equivalence relation<a class='hidden_link' href='#tab:rand.req.eng-row-11-column-3-sentence-1'>.</a></div> <div id='tab:rand.req.eng-row-11-column-3-sentence-2' class='sentence'>With <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.032em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span></span></span></span></span></span></span> and <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.032em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</span></span></span></span></span></span></span></span>
    as the infinite sequences of values
    that would be generated
    by repeated future calls
    to <span class='texttt'>x<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> and <span class='texttt'>y<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>,
    respectively,
    returns <span class='texttt'><span class='literal'>true</span></span>
      if <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.032em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</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-msubsup MJXc-space3"><span class="mjx-base" style="margin-right: -0.032em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</span></span></span></span></span></span></span></span>;
    else returns <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#tab:rand.req.eng-row-11-column-3-sentence-2'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><span class='math'><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-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;">size of state</span></span><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></span></div></td></tr><tr id='tab:rand.req.eng-row-12' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.eng-row-12'>🔗</a></div><div class='texpara'><div id='tab:rand.req.eng-row-12-column-1-sentence-1' class='sentence'><span class='texttt'>x <span class='operator'>!</span><span class='operator'>=</span> y</span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.eng-row-12-column-2-sentence-1' class='sentence'><span class='texttt'><span class='keyword'>bool</span></span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.eng-row-12-column-3-sentence-1' class='sentence'><span class='texttt'><span class='operator'>!</span><span class='parenthesis'>(</span>x <span class='operator'>=</span><span class='operator'>=</span> y<span class='parenthesis'>)</span></span><a class='hidden_link' href='#tab:rand.req.eng-row-12-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><span class='math'><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-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;">size of state</span></span><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></span></div></td></tr></table></div></div></div><div class='para' id='req.eng-5'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2025'>#</a></div><div class='texpara'><div id='req.eng-5.sentence-1' class='sentence'><span class='texttt'>E</span> shall meet the
<a href='utility.arg.requirements#:Cpp17CopyConstructible' title='16.4.4.2&emsp;Template argument requirements&emsp;[utility.arg.requirements]'><i >Cpp17CopyConstructible</i></a> (Table <a href='utility.arg.requirements#tab:cpp17.copyconstructible' title='Table 32: Cpp17CopyConstructible requirements (in addition to Cpp17MoveConstructible)'>32</a>)
and <a href='utility.arg.requirements#:Cpp17CopyAssignable' title='16.4.4.2&emsp;Template argument requirements&emsp;[utility.arg.requirements]'><i >Cpp17CopyAssignable</i></a> (Table <a href='utility.arg.requirements#tab:cpp17.copyassignable' title='Table 34: Cpp17CopyAssignable requirements (in addition to Cpp17MoveAssignable)'>34</a>) requirements<a class='hidden_link' href='#req.eng-5.sentence-1'>.</a></div> <div id='req.eng-5.sentence-2' class='sentence'>These operations shall each be of complexity
no worse than <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;">size of state</span></span><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></span><a class='hidden_link' href='#req.eng-5.sentence-2'>.</a></div></div></div><div class='para' id='req.eng-6'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2032'>#</a></div><div class='texpara'><div id='req.eng-6.sentence-1' class='sentence'>On hosted implementations,
the following expressions are well-formed and have the specified semantics<a class='hidden_link' href='#req.eng-6.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='req.eng-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#req.eng-itemdecl:1'>🔗</a></div><code class='itemdeclcode'>os <span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span> x
</code></div></div><div class='para' id='req.eng-7'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2041'>#</a></div><div class='texpara'><div id='req.eng-7.sentence-1' class='sentence'><i >Effects</i>: With <span class='texttt'>os<span class='operator'>.</span><i >fmtflags</i></span> set to
<span class='texttt'>ios_<span class='shy'></span>base<span class='operator'>&#x200b;::&#x200b;</span>dec<span class='operator'>|</span>ios_<span class='shy'></span>base<span class='operator'>&#x200b;::&#x200b;</span>left</span>
and the fill character set to the space character,
writes to <span class='texttt'>os</span>
the textual representation
of <span class='texttt'>x</span>'s current state<a class='hidden_link' href='#req.eng-7.sentence-1'>.</a></div> <div id='req.eng-7.sentence-2' class='sentence'>In the output,
adjacent numbers are separated
by one or more space characters<a class='hidden_link' href='#req.eng-7.sentence-2'>.</a></div></div></div></div><div class='para' id='req.eng-8'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2053'>#</a></div><div class='texpara'><div id='req.eng-8.sentence-1' class='sentence'><i >Postconditions</i>: The <span class='texttt'>os<span class='operator'>.</span><i >fmtflags</i></span> and fill character are unchanged<a class='hidden_link' href='#req.eng-8.sentence-1'>.</a></div></div></div></div><div class='para' id='req.eng-9'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2057'>#</a></div><div class='texpara'><div id='req.eng-9.sentence-1' class='sentence'><i >Result</i>: reference to the type of <span class='texttt'>os</span><a class='hidden_link' href='#req.eng-9.sentence-1'>.</a></div></div></div></div><div class='para' id='req.eng-10'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2061'>#</a></div><div class='texpara'><div id='req.eng-10.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>os</span><a class='hidden_link' href='#req.eng-10.sentence-1'>.</a></div></div></div></div><div class='para' id='req.eng-11'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2065'>#</a></div><div class='texpara'><div id='req.eng-11.sentence-1' class='sentence'><i >Complexity</i>: <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;">size of state</span></span><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></span></div></div></div></div><div class='texpara'><div class='itemdecl' id='req.eng-itemdecl:2'><div class='marginalizedparent'><a class='itemDeclLink' href='#req.eng-itemdecl:2'>🔗</a></div><code class='itemdeclcode'>is <span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> v
</code></div></div><div class='para' id='req.eng-12'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2075'>#</a></div><div class='texpara'><div id='req.eng-12.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>is</span> provides a textual representation
that was previously written
using an output stream
whose imbued locale
was the same as that of <span class='texttt'>is</span>,
and whose type's template specialization arguments
<span class='texttt'>charT</span> and <span class='texttt'>traits</span>
were respectively the same as those of <span class='texttt'>is</span><a class='hidden_link' href='#req.eng-12.sentence-1'>.</a></div></div></div></div><div class='para' id='req.eng-13'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-13'>13</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2086'>#</a></div><div class='texpara'><div id='req.eng-13.sentence-1' class='sentence'><i >Effects</i>: With <span class='texttt'>is<span class='operator'>.</span><i >fmtflags</i></span>
set to <span class='texttt'>ios_<span class='shy'></span>base<span class='operator'>&#x200b;::&#x200b;</span>dec</span>,
sets <span class='texttt'>v</span>'s state
as determined by reading its textual representation from <span class='texttt'>is</span><a class='hidden_link' href='#req.eng-13.sentence-1'>.</a></div> <div id='req.eng-13.sentence-2' class='sentence'>If bad input is encountered,
ensures that <span class='texttt'>v</span>'s state is unchanged by the operation
and
calls <span class='texttt'>is<span class='operator'>.</span>setstate<span class='parenthesis'>(</span>ios_<span class='shy'></span>base<span class='operator'>&#x200b;::&#x200b;</span>failbit<span class='parenthesis'>)</span></span>
(which may throw <span class='texttt'>ios_<span class='shy'></span>base<span class='operator'>&#x200b;::&#x200b;</span>failure</span> (<a href='iostate.flags' title='31.5.4.4&emsp;Flags functions'>[iostate.<span class='shy'></span>flags]</a>))<a class='hidden_link' href='#req.eng-13.sentence-2'>.</a></div> <div id='req.eng-13.sentence-3' class='sentence'>If a textual representation written via <span class='texttt'>os <span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span> x</span>
was subsequently read via <span class='texttt'>is <span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> v</span>,
then <span class='texttt'>x <span class='operator'>=</span><span class='operator'>=</span> v</span>
provided that there have been no intervening invocations
of <span class='texttt'>x</span> or of <span class='texttt'>v</span><a class='hidden_link' href='#req.eng-13.sentence-3'>.</a></div></div></div></div><div class='para' id='req.eng-14'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-14'>14</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2103'>#</a></div><div class='texpara'><div id='req.eng-14.sentence-1' class='sentence'><i >Postconditions</i>: The <span class='texttt'>is<span class='operator'>.</span><i >fmtflags</i></span> are unchanged<a class='hidden_link' href='#req.eng-14.sentence-1'>.</a></div></div></div></div><div class='para' id='req.eng-15'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-15'>15</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2107'>#</a></div><div class='texpara'><div id='req.eng-15.sentence-1' class='sentence'><i >Result</i>: reference to the type of <span class='texttt'>is</span><a class='hidden_link' href='#req.eng-15.sentence-1'>.</a></div></div></div></div><div class='para' id='req.eng-16'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-16'>16</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2111'>#</a></div><div class='texpara'><div id='req.eng-16.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>is</span><a class='hidden_link' href='#req.eng-16.sentence-1'>.</a></div></div></div></div><div class='para' id='req.eng-17'><div class='marginalizedparent'><a class='marginalized' href='#req.eng-17'>17</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2115'>#</a></div><div class='texpara'><div id='req.eng-17.sentence-1' class='sentence'><i >Complexity</i>: <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;">size of state</span></span><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></span></div></div></div></div><div class='texpara'>
</div><div class='footnoteSeparator'></div><div class='footnote' id='footnote-241'><div class='texpara'><a class='footnotenum' href='#footnote-241'>241)</a><a class='footnoteBacklink' href='#footnoteref-241'>241)</a> <div id='footnote-241.sentence-1' class='sentence'>This constructor
  (as well as the subsequent corresponding <span class='texttt'>seed<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> function)
  can be particularly useful
  to applications requiring
  a large number of independent random sequences<a class='hidden_link' href='#footnote-241.sentence-1'>.</a></div></div></div><div class='footnote' id='footnote-242'><div class='texpara'><a class='footnotenum' href='#footnote-242'>242)</a><a class='footnoteBacklink' href='#footnoteref-242'>242)</a> <div id='footnote-242.sentence-1' class='sentence'>This operation is common
  in user code,
  and can often be implemented
  in an engine-specific manner
  so as to provide significant performance improvements
  over an equivalent naive loop
  that makes <span class='texttt'>z</span> consecutive calls <span class='texttt'>e<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#footnote-242.sentence-1'>.</a></div></div></div></div><div id='req.adapt' class='section'><h4 ><a class='secnum' href='#req.adapt' style='min-width:95pt'>29.5.3.5</a> Random number engine adaptor requirements <a class='abbr_ref' href='rand.req.adapt'>[rand.req.adapt]</a></h4><div class='para' id='req.adapt-1'><div class='marginalizedparent'><a class='marginalized' href='#req.adapt-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2129'>#</a></div><div class='texpara'><div id='req.adapt-1.sentence-1' class='sentence'>A <a class='hidden_link' href='#def:random_number_engine_adaptor' id='def:random_number_engine_adaptor'><i>random number engine adaptor</i></a>
(commonly shortened to <a class='hidden_link' href='#def:adaptor' id='def:adaptor'><i>adaptor</i></a>)
<span class='texttt'>a</span> of type <span class='texttt'>A</span>
is a random number engine
that takes values
produced by some other random number engine,
and applies an algorithm to those values
in order to deliver a sequence of values
with different randomness properties<a class='hidden_link' href='#req.adapt-1.sentence-1'>.</a></div> <div id='req.adapt-1.sentence-2' class='sentence'>An engine <span class='texttt'>b</span> of type <span class='texttt'>B</span> adapted in this way
is termed a <a class='hidden_link' href='#def:base_engine' id='def:base_engine'><i>base engine</i></a>
in this context<a class='hidden_link' href='#req.adapt-1.sentence-2'>.</a></div> <div id='req.adapt-1.sentence-3' class='sentence'>The expression <span class='texttt'>a<span class='operator'>.</span>base<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> shall be valid and shall return a
const reference to <span class='texttt'>a</span>'s base engine<a class='hidden_link' href='#req.adapt-1.sentence-3'>.</a></div></div></div><div class='para' id='req.adapt-2'><div class='marginalizedparent'><a class='marginalized' href='#req.adapt-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2145'>#</a></div><div class='texpara'><div id='req.adapt-2.sentence-1' class='sentence'>The requirements of a random number engine type
shall be interpreted as follows
with respect to a random number engine adaptor type<a class='hidden_link' href='#req.adapt-2.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='req.adapt-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#req.adapt-itemdecl:1'>🔗</a></div><code class='itemdeclcode'>A<span class='operator'>::</span>A<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</code></div></div><div class='para' id='req.adapt-3'><div class='marginalizedparent'><a class='marginalized' href='#req.adapt-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2155'>#</a></div><div class='texpara'><div id='req.adapt-3.sentence-1' class='sentence'><i >Effects</i>: The base engine is initialized
 as if by its default constructor<a class='hidden_link' href='#req.adapt-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div class='itemdecl' id='req.adapt-itemdecl:2'><div class='marginalizedparent'><a class='itemDeclLink' href='#req.adapt-itemdecl:2'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> A<span class='operator'>&amp;</span> a1, <span class='keyword'>const</span> A<span class='operator'>&amp;</span> a2<span class='parenthesis'>)</span>;
</code></div></div><div class='para' id='req.adapt-4'><div class='marginalizedparent'><a class='marginalized' href='#req.adapt-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2166'>#</a></div><div class='texpara'><div id='req.adapt-4.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='literal'>true</span></span> if <span class='texttt'>a1</span>'s base engine is equal to <span class='texttt'>a2</span>'s base engine<a class='hidden_link' href='#req.adapt-4.sentence-1'>.</a></div> <div id='req.adapt-4.sentence-2' class='sentence'>Otherwise returns <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#req.adapt-4.sentence-2'>.</a></div></div></div></div><div class='texpara'><div class='itemdecl' id='req.adapt-itemdecl:3'><div class='marginalizedparent'><a class='itemDeclLink' href='#req.adapt-itemdecl:3'>🔗</a></div><code class='itemdeclcode'>A<span class='operator'>::</span>A<span class='parenthesis'>(</span>result_type s<span class='parenthesis'>)</span>;
</code></div></div><div class='para' id='req.adapt-5'><div class='marginalizedparent'><a class='marginalized' href='#req.adapt-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2177'>#</a></div><div class='texpara'><div id='req.adapt-5.sentence-1' class='sentence'><i >Effects</i>: The base engine is initialized
 with <span class='texttt'>s</span><a class='hidden_link' href='#req.adapt-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div class='itemdecl' id='req.adapt-itemdecl:4'><div class='marginalizedparent'><a class='itemDeclLink' href='#req.adapt-itemdecl:4'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> A<span class='operator'>::</span>A<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</code></div></div><div class='para' id='req.adapt-6'><div class='marginalizedparent'><a class='marginalized' href='#req.adapt-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2188'>#</a></div><div class='texpara'><div id='req.adapt-6.sentence-1' class='sentence'><i >Effects</i>: The base engine is initialized
 with <span class='texttt'>q</span><a class='hidden_link' href='#req.adapt-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div class='itemdecl' id='req.adapt-itemdecl:5'><div class='marginalizedparent'><a class='itemDeclLink' href='#req.adapt-itemdecl:5'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>void</span> seed<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</code></div></div><div class='para' id='req.adapt-7'><div class='marginalizedparent'><a class='marginalized' href='#req.adapt-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2199'>#</a></div><div class='texpara'><div id='req.adapt-7.sentence-1' class='sentence'><i >Effects</i>: With <span class='texttt'>b</span> as the base engine, invokes <span class='texttt'>b<span class='operator'>.</span>seed<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#req.adapt-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div class='itemdecl' id='req.adapt-itemdecl:6'><div class='marginalizedparent'><a class='itemDeclLink' href='#req.adapt-itemdecl:6'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>void</span> seed<span class='parenthesis'>(</span>result_type s<span class='parenthesis'>)</span>;
</code></div></div><div class='para' id='req.adapt-8'><div class='marginalizedparent'><a class='marginalized' href='#req.adapt-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2209'>#</a></div><div class='texpara'><div id='req.adapt-8.sentence-1' class='sentence'><i >Effects</i>: With <span class='texttt'>b</span> as the base engine, invokes <span class='texttt'>b<span class='operator'>.</span>seed<span class='parenthesis'>(</span>s<span class='parenthesis'>)</span></span><a class='hidden_link' href='#req.adapt-8.sentence-1'>.</a></div></div></div></div><div class='texpara'><div class='itemdecl' id='req.adapt-itemdecl:7'><div class='marginalizedparent'><a class='itemDeclLink' href='#req.adapt-itemdecl:7'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class='keyword'>void</span> seed<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</code></div></div><div class='para' id='req.adapt-9'><div class='marginalizedparent'><a class='marginalized' href='#req.adapt-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2219'>#</a></div><div class='texpara'><div id='req.adapt-9.sentence-1' class='sentence'><i >Effects</i>: With <span class='texttt'>b</span> as the base engine, invokes <span class='texttt'>b<span class='operator'>.</span>seed<span class='parenthesis'>(</span>q<span class='parenthesis'>)</span></span><a class='hidden_link' href='#req.adapt-9.sentence-1'>.</a></div></div></div></div><div class='para' id='req.adapt-10'><div class='marginalizedparent'><a class='marginalized' href='#req.adapt-10'>10</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2224'>#</a></div><div class='texpara'><div id='req.adapt-10.sentence-1' class='sentence'><span class='texttt'>A</span> shall also meet
the following additional requirements:
<ul class='itemize'><li id='req.adapt-10.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.adapt-10.1'>(10.1)</a></div><div class='texpara'><div id='req.adapt-10.1.sentence-1' class='sentence'>The complexity
   of each function
   shall not exceed the complexity
   of the corresponding function
   applied to the base engine<a class='hidden_link' href='#req.adapt-10.1.sentence-1'>.</a></div></div></li><li id='req.adapt-10.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.adapt-10.2'>(10.2)</a></div><div class='texpara'><div id='req.adapt-10.2.sentence-1' class='sentence'>The state
   of <span class='texttt'>A</span>
   shall include the state
   of its base engine<a class='hidden_link' href='#req.adapt-10.2.sentence-1'>.</a></div> <div id='req.adapt-10.2.sentence-2' class='sentence'>The size of <span class='texttt'>A</span>'s state
   shall be no less than the size of the base engine<a class='hidden_link' href='#req.adapt-10.2.sentence-2'>.</a></div></div></li><li id='req.adapt-10.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.adapt-10.3'>(10.3)</a></div><div class='texpara'><div id='req.adapt-10.3.sentence-1' class='sentence'>Copying <span class='texttt'>A</span>'s state
   (e.g., during copy construction or copy assignment)
   shall include copying
   the state of the base engine of <span class='texttt'>A</span><a class='hidden_link' href='#req.adapt-10.3.sentence-1'>.</a></div></div></li><li id='req.adapt-10.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.adapt-10.4'>(10.4)</a></div><div class='texpara'><div id='req.adapt-10.4.sentence-1' class='sentence'>The textual representation
   of <span class='texttt'>A</span>
   shall include
   the textual representation of its base engine<a class='hidden_link' href='#req.adapt-10.4.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div id='req.dist' class='section'><h4 ><a class='secnum' href='#req.dist' style='min-width:95pt'>29.5.3.6</a> Random number distribution requirements <a class='abbr_ref' href='rand.req.dist'>[rand.req.dist]</a></h4><div class='texpara'><a class='index' id=':random_number_distribution,requirements'></a><a class='index' id=':requirements,random_number_distribution'></a></div><div class='para' id='req.dist-1'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2260'>#</a></div><div class='texpara'><div id='req.dist-1.sentence-1' class='sentence'>A <a class='hidden_link' href='#def:random_number_distribution' id='def:random_number_distribution'><i>random number distribution</i></a>
(commonly shortened to <a class='hidden_link' href='#def:distribution' id='def:distribution'><i>distribution</i></a>)
<span class='texttt'>d</span> of type <span class='texttt'>D</span>
is a function object
returning values
that are distributed according to
an associated mathematical <a class='hidden_link' href='#def:probability_density_function' id='def:probability_density_function'><i>probability density function</i></a>
<span class='math'><span class='mathalpha'>p</span>(<span class='mathalpha'>z</span>)</span>
or according to
an associated <a class='hidden_link' href='#def:discrete_probability_function' id='def:discrete_probability_function'><i>discrete probability function</i></a>
<span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><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></span><a class='hidden_link' href='#req.dist-1.sentence-1'>.</a></div> <div id='req.dist-1.sentence-2' class='sentence'>A distribution's specification
identifies its associated probability function
<span class='math'><span class='mathalpha'>p</span>(<span class='mathalpha'>z</span>)</span> or <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><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></span><a class='hidden_link' href='#req.dist-1.sentence-2'>.</a></div></div></div><div class='para' id='req.dist-2'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2276'>#</a></div><div class='texpara'><div id='req.dist-2.sentence-1' class='sentence'>An associated probability function is typically expressed
using certain externally-supplied quantities
known as the <a class='hidden_link' href='#def:parameters_of_the_distribution' id='def:parameters_of_the_distribution'><i>parameters of the distribution</i></a><a class='hidden_link' href='#req.dist-2.sentence-1'>.</a></div> <div id='req.dist-2.sentence-2' class='sentence'>Such distribution parameters are identified
in this context by writing, for example,
  <span class='math'><span class='mathalpha'>p</span>(<span class='mathalpha'>z</span><span style='white-space:nowrap'>&thinsp;</span>|<span style='white-space:nowrap'>&thinsp;</span><span class='mathalpha'>a</span>,<span class='mathalpha'>b</span>)</span> or <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><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></span>,
  to name specific parameters,
or by writing, for example,
  <span class='math'><span class='mathalpha'>p</span>(<span class='mathalpha'>z</span><span style='white-space:nowrap'>&thinsp;</span>|{<span class='texttt'>p</span>})</span>
  or <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mrow MJXc-space1"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">{</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></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.225em; padding-bottom: 0.519em;">p</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><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 class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><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></span>,
  to denote a distribution's parameters <span class='texttt'>p</span> taken as a whole<a class='hidden_link' href='#req.dist-2.sentence-2'>.</a></div></div></div><div class='para' id='req.dist-3'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2289'>#</a></div><div class='texpara'><div id='req.dist-3.sentence-1' class='sentence'>A class <span class='texttt'>D</span>
meets the requirements
of a <a class='hidden_link' href='#def:random_number_distribution' id='def:random_number_distribution'><i>random number distribution</i></a>
if the expressions shown
in Table <a href='#tab:rand.req.dist' title='Table 126: Random number distribution requirements'>126</a>
are valid and have the indicated semantics,
and if <span class='texttt'>D</span> and its associated types
also meet all other requirements
of <a href='#req.dist' title='29.5.3.6&emsp;Random number distribution requirements'>[rand.<span class='shy'></span>req.<span class='shy'></span>dist]</a><a class='hidden_link' href='#req.dist-3.sentence-1'>.</a></div> <div id='req.dist-3.sentence-2' class='sentence'>In Table <a href='#tab:rand.req.dist' title='Table 126: Random number distribution requirements'>126</a> and throughout this subclause,
<ul class='itemize'><li id='req.dist-3.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.dist-3.1'>(3.1)</a></div><span class='texttt'>T</span> is the type named by
    <span class='texttt'>D</span>'s associated <span class='texttt'>result_<span class='shy'></span>type</span>;</li><li id='req.dist-3.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.dist-3.2'>(3.2)</a></div><span class='texttt'>P</span> is the type named by
    <span class='texttt'>D</span>'s associated <span class='texttt'>param_<span class='shy'></span>type</span>;</li><li id='req.dist-3.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.dist-3.3'>(3.3)</a></div><span class='texttt'>d</span> is a
    value of <span class='texttt'>D</span>,
    and
    <span class='texttt'>x</span> and <span class='texttt'>y</span> are (possibly const) values of <span class='texttt'>D</span>;</li><li id='req.dist-3.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.dist-3.4'>(3.4)</a></div><span class='texttt'>glb</span> and <span class='texttt'>lub</span>
    are values of <span class='texttt'>T</span>
    respectively corresponding to
    the greatest lower bound and the least upper bound
    on the values potentially returned by <span class='texttt'>d</span>'s <span class='texttt'><span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>,
    as determined by the current values of <span class='texttt'>d</span>'s parameters;</li><li id='req.dist-3.5'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.dist-3.5'>(3.5)</a></div><span class='texttt'>p</span> is a (possibly const) value of <span class='texttt'>P</span>;</li><li id='req.dist-3.6'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.dist-3.6'>(3.6)</a></div><span class='texttt'>g</span>, <span class='texttt'>g1</span>, and <span class='texttt'>g2</span> are lvalues of a type
    meeting the requirements
    of a <a href='#req.urng' title='29.5.3.3&emsp;Uniform random bit generator requirements&emsp;[rand.req.urng]'>uniform random bit generator</a>;</li><li id='req.dist-3.7'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.dist-3.7'>(3.7)</a></div><span class='texttt'>os</span> is an lvalue of the type of some class template specialization
    <span class='texttt'>basic_<span class='shy'></span>ostream<span class='anglebracket'>&lt;</span>charT,</span> <span class='texttt'>traits<span class='anglebracket'>&gt;</span></span>;
  and</li><li id='req.dist-3.8'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#req.dist-3.8'>(3.8)</a></div><span class='texttt'>is</span> is an lvalue of the type of some class template specialization
    <span class='texttt'>basic_<span class='shy'></span>istream<span class='anglebracket'>&lt;</span>charT,</span> <span class='texttt'>traits<span class='anglebracket'>&gt;</span></span>;</li></ul>
where <span class='texttt'>charT</span> and <span class='texttt'>traits</span> are constrained
according to <a href='strings' title='27&emsp;Strings library'>[strings]</a> and <a href='input.output' title='31&emsp;Input/output library'>[input.<span class='shy'></span>output]</a><a class='hidden_link' href='#req.dist-3.sentence-2'>.</a></div></div><div class='texpara'><div class='numberedTable' id='tab:rand.req.dist'>Table <a href='#tab:rand.req.dist'>126</a> &mdash; Random number distribution requirements&emsp;<a href='./tab:rand.req.dist'>[tab:rand.req.dist]</a><br><table ><tr id='tab:rand.req.dist-row-1' class='rowsep'><td class='center'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.dist-row-1'>🔗</a></div><div class='texpara'><div id='tab:rand.req.dist-row-1-column-1-sentence-1' class='sentence'><b>Expression</b></div></div></td><td class='center'><div class='texpara'><div id='tab:rand.req.dist-row-1-column-2-sentence-1' class='sentence'><b>Return type</b></div></div></td><td class='center'><div class='texpara'><div id='tab:rand.req.dist-row-1-column-3-sentence-1' class='sentence'><b>Pre/post-condition</b></div></div></td><td class='center'><div class='texpara'><div id='tab:rand.req.dist-row-1-column-4-sentence-1' class='sentence'><b>Complexity</b></div></div></td></tr><tr id='tab:rand.req.dist-row-2' class='capsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.dist-row-2'>🔗</a></div><div class='texpara'><div id='tab:rand.req.dist-row-2-column-1-sentence-1' class='sentence'><span class='texttt'>D<span class='operator'>&#x200b;::&#x200b;</span>result_<span class='shy'></span>type</span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.dist-row-2-column-2-sentence-1' class='sentence'><span class='texttt'>T</span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.dist-row-2-column-3-sentence-1' class='sentence'><span class='texttt'>T</span> is an <a href='basic.fundamental#def:type,arithmetic' title='6.8.2&emsp;Fundamental types&emsp;[basic.fundamental]'>arithmetic type</a><a class='hidden_link' href='#tab:rand.req.dist-row-2-column-3-sentence-1'>.</a></div></div></td><td class='empty left' style='width:15%'></td></tr><tr id='tab:rand.req.dist-row-3' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.dist-row-3'>🔗</a></div><div class='texpara'><div id='tab:rand.req.dist-row-3-column-1-sentence-1' class='sentence'><span class='texttt'>D<span class='operator'>&#x200b;::&#x200b;</span>param_<span class='shy'></span>type</span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.dist-row-3-column-2-sentence-1' class='sentence'><span class='texttt'>P</span></div></div></td><td class='empty left' style='width:30%'></td><td class='empty left' style='width:15%'></td></tr><tr id='tab:rand.req.dist-row-4' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.dist-row-4'>🔗</a></div><div class='texpara'><div id='tab:rand.req.dist-row-4-column-1-sentence-1' class='sentence'><span class='texttt'>D<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></div></div></td><td class='empty left' style='width:22%'></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.dist-row-4-column-3-sentence-1' class='sentence'>Creates a distribution whose behavior is indistinguishable
    from that of any other newly default-constructed distribution
    of type <span class='texttt'>D</span><a class='hidden_link' href='#tab:rand.req.dist-row-4-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.dist-row-4-column-4-sentence-1' class='sentence'>constant</div></div></td></tr><tr id='tab:rand.req.dist-row-5' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.dist-row-5'>🔗</a></div><div class='texpara'><div id='tab:rand.req.dist-row-5-column-1-sentence-1' class='sentence'><span class='texttt'>D<span class='parenthesis'>(</span>p<span class='parenthesis'>)</span></span></div></div></td><td class='empty left' style='width:22%'></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.dist-row-5-column-3-sentence-1' class='sentence'>Creates a distribution whose behavior is indistinguishable
    from that of a distribution
    newly constructed directly from the values used to construct <span class='texttt'>p</span><a class='hidden_link' href='#tab:rand.req.dist-row-5-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.dist-row-5-column-4-sentence-1' class='sentence'>same as <span class='texttt'>p</span>'s construction</div></div></td></tr><tr id='tab:rand.req.dist-row-6' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.dist-row-6'>🔗</a></div><div class='texpara'><div id='tab:rand.req.dist-row-6-column-1-sentence-1' class='sentence'><span class='texttt'>d<span class='operator'>.</span>reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.dist-row-6-column-2-sentence-1' class='sentence'><span id=':void______'><span class='texttt'><span class='keyword'>void</span></span></span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.dist-row-6-column-3-sentence-1' class='sentence'>Subsequent uses of <span class='texttt'>d</span> do not depend
    on values produced by any engine
    prior to invoking <span class='texttt'>reset</span><a class='hidden_link' href='#tab:rand.req.dist-row-6-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.dist-row-6-column-4-sentence-1' class='sentence'>constant</div></div></td></tr><tr id='tab:rand.req.dist-row-7' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.dist-row-7'>🔗</a></div><div class='texpara'><div id='tab:rand.req.dist-row-7-column-1-sentence-1' class='sentence'><span class='texttt'>x<span class='operator'>.</span>param<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.dist-row-7-column-2-sentence-1' class='sentence'><span class='texttt'>P</span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.dist-row-7-column-3-sentence-1' class='sentence'>Returns a value
    <span class='texttt'>p</span> such that <span class='texttt'>D<span class='parenthesis'>(</span>p<span class='parenthesis'>)</span><span class='operator'>.</span>param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> p</span><a class='hidden_link' href='#tab:rand.req.dist-row-7-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.dist-row-7-column-4-sentence-1' class='sentence'>no worse than the complexity of <span class='texttt'>D<span class='parenthesis'>(</span>p<span class='parenthesis'>)</span></span></div></div></td></tr><tr id='tab:rand.req.dist-row-8' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.dist-row-8'>🔗</a></div><div class='texpara'><div id='tab:rand.req.dist-row-8-column-1-sentence-1' class='sentence'><span class='texttt'>d<span class='operator'>.</span>param<span class='parenthesis'>(</span>p<span class='parenthesis'>)</span></span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.dist-row-8-column-2-sentence-1' class='sentence'><span id=':void_______'><span class='texttt'><span class='keyword'>void</span></span></span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.dist-row-8-column-3-sentence-1' class='sentence'><i >Postconditions</i>: <span class='texttt'>d<span class='operator'>.</span>param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> p</span><a class='hidden_link' href='#tab:rand.req.dist-row-8-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.dist-row-8-column-4-sentence-1' class='sentence'>no worse than the complexity of <span class='texttt'>D<span class='parenthesis'>(</span>p<span class='parenthesis'>)</span></span></div></div></td></tr><tr id='tab:rand.req.dist-row-9' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.dist-row-9'>🔗</a></div><div class='texpara'><div id='tab:rand.req.dist-row-9-column-1-sentence-1' class='sentence'><span class='texttt'>d<span class='parenthesis'>(</span>g<span class='parenthesis'>)</span></span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.dist-row-9-column-2-sentence-1' class='sentence'><span class='texttt'>T</span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.dist-row-9-column-3-sentence-1' class='sentence'>With <span class='math'><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.225em; padding-bottom: 0.519em;">p</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></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-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">d<span class='operator'>.</span>param<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span>,
    the sequence of numbers
    returned by successive invocations
    with the same object <span class='texttt'>g</span>
    is randomly distributed
    according to the associated
      <span class='math'><span class='mathalpha'>p</span>(<span class='mathalpha'>z</span><span style='white-space:nowrap'>&thinsp;</span>|{<span class='texttt'>p</span>})</span>
    or
      <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mrow MJXc-space1"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">{</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></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.225em; padding-bottom: 0.519em;">p</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><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 class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><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></span>
    function<a class='hidden_link' href='#tab:rand.req.dist-row-9-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.dist-row-9-column-4-sentence-1' class='sentence'>amortized constant number of invocations of <span class='texttt'>g</span></div></div></td></tr><tr id='tab:rand.req.dist-row-10' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.dist-row-10'>🔗</a></div><div class='texpara'><div id='tab:rand.req.dist-row-10-column-1-sentence-1' class='sentence'><span class='texttt'>d<span class='parenthesis'>(</span>g,p<span class='parenthesis'>)</span></span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.dist-row-10-column-2-sentence-1' class='sentence'><span class='texttt'>T</span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.dist-row-10-column-3-sentence-1' class='sentence'>The sequence of numbers
    returned by successive invocations
    with the same objects <span class='texttt'>g</span> and <span class='texttt'>p</span>
    is randomly distributed
    according to the associated
      <span class='math'><span class='mathalpha'>p</span>(<span class='mathalpha'>z</span><span style='white-space:nowrap'>&thinsp;</span>|{<span class='texttt'>p</span>})</span>
    or
      <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mrow MJXc-space1"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">{</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></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.225em; padding-bottom: 0.519em;">p</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><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 class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><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></span>
    function<a class='hidden_link' href='#tab:rand.req.dist-row-10-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.dist-row-10-column-4-sentence-1' class='sentence'>amortized constant number of invocations of <span class='texttt'>g</span></div></div></td></tr><tr id='tab:rand.req.dist-row-11' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.dist-row-11'>🔗</a></div><div class='texpara'><div id='tab:rand.req.dist-row-11-column-1-sentence-1' class='sentence'><span class='texttt'>x<span class='operator'>.</span>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.dist-row-11-column-2-sentence-1' class='sentence'><span class='texttt'>T</span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.dist-row-11-column-3-sentence-1' class='sentence'>Returns <span class='texttt'>glb</span><a class='hidden_link' href='#tab:rand.req.dist-row-11-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.dist-row-11-column-4-sentence-1' class='sentence'>constant</div></div></td></tr><tr id='tab:rand.req.dist-row-12' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.dist-row-12'>🔗</a></div><div class='texpara'><div id='tab:rand.req.dist-row-12-column-1-sentence-1' class='sentence'><span class='texttt'>x<span class='operator'>.</span>max<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.dist-row-12-column-2-sentence-1' class='sentence'><span class='texttt'>T</span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.dist-row-12-column-3-sentence-1' class='sentence'>Returns <span class='texttt'>lub</span><a class='hidden_link' href='#tab:rand.req.dist-row-12-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.dist-row-12-column-4-sentence-1' class='sentence'>constant</div></div></td></tr><tr id='tab:rand.req.dist-row-13' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.dist-row-13'>🔗</a></div><div class='texpara'><div id='tab:rand.req.dist-row-13-column-1-sentence-1' class='sentence'><span class='texttt'>x <span class='operator'>=</span><span class='operator'>=</span> y</span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.dist-row-13-column-2-sentence-1' class='sentence'><span class='texttt'><span class='keyword'>bool</span></span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.dist-row-13-column-3-sentence-1' class='sentence'>This operator is an equivalence relation<a class='hidden_link' href='#tab:rand.req.dist-row-13-column-3-sentence-1'>.</a></div> <div id='tab:rand.req.dist-row-13-column-3-sentence-2' class='sentence'>Returns <span class='texttt'><span class='literal'>true</span></span>
      if <span class='texttt'>x<span class='operator'>.</span>param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> y<span class='operator'>.</span>param<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> and <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.032em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</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-msubsup MJXc-space3"><span class="mjx-base" style="margin-right: -0.032em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">2</span></span></span></span></span></span></span></span>,
      where <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.032em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</span></span></span></span></span></span></span></span> and <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.032em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">2</span></span></span></span></span></span></span></span> are
      the infinite sequences of values
      that would be generated, respectively,
      by repeated future calls
      to <span class='texttt'>x<span class='parenthesis'>(</span>g1<span class='parenthesis'>)</span></span> and <span class='texttt'>y<span class='parenthesis'>(</span>g2<span class='parenthesis'>)</span></span>
      whenever <span class='texttt'>g1 <span class='operator'>=</span><span class='operator'>=</span> g2</span><a class='hidden_link' href='#tab:rand.req.dist-row-13-column-3-sentence-2'>.</a></div> <div id='tab:rand.req.dist-row-13-column-3-sentence-3' class='sentence'>Otherwise returns <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#tab:rand.req.dist-row-13-column-3-sentence-3'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.dist-row-13-column-4-sentence-1' class='sentence'>constant</div></div></td></tr><tr id='tab:rand.req.dist-row-14' class='rowsep'><td class='left' style='width:22%'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.req.dist-row-14'>🔗</a></div><div class='texpara'><div id='tab:rand.req.dist-row-14-column-1-sentence-1' class='sentence'><span class='texttt'>x <span class='operator'>!</span><span class='operator'>=</span> y</span></div></div></td><td class='left' style='width:22%'><div class='texpara'><div id='tab:rand.req.dist-row-14-column-2-sentence-1' class='sentence'><span class='texttt'><span class='keyword'>bool</span></span></div></div></td><td class='left' style='width:30%'><div class='texpara'><div id='tab:rand.req.dist-row-14-column-3-sentence-1' class='sentence'><span class='texttt'><span class='operator'>!</span><span class='parenthesis'>(</span>x <span class='operator'>=</span><span class='operator'>=</span> y<span class='parenthesis'>)</span></span><a class='hidden_link' href='#tab:rand.req.dist-row-14-column-3-sentence-1'>.</a></div></div></td><td class='left' style='width:15%'><div class='texpara'><div id='tab:rand.req.dist-row-14-column-4-sentence-1' class='sentence'>same as <span class='texttt'>x <span class='operator'>=</span><span class='operator'>=</span> y</span><a class='hidden_link' href='#tab:rand.req.dist-row-14-column-4-sentence-1'>.</a></div></div></td></tr></table></div></div></div><div class='para' id='req.dist-4'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2454'>#</a></div><div class='texpara'><div id='req.dist-4.sentence-1' class='sentence'><span class='texttt'>D</span> shall meet the
<a href='utility.arg.requirements#:Cpp17CopyConstructible' title='16.4.4.2&emsp;Template argument requirements&emsp;[utility.arg.requirements]'><i >Cpp17CopyConstructible</i></a> (Table <a href='utility.arg.requirements#tab:cpp17.copyconstructible' title='Table 32: Cpp17CopyConstructible requirements (in addition to Cpp17MoveConstructible)'>32</a>)
and <a href='utility.arg.requirements#:Cpp17CopyAssignable' title='16.4.4.2&emsp;Template argument requirements&emsp;[utility.arg.requirements]'><i >Cpp17CopyAssignable</i></a> (Table <a href='utility.arg.requirements#tab:cpp17.copyassignable' title='Table 34: Cpp17CopyAssignable requirements (in addition to Cpp17MoveAssignable)'>34</a>) requirements<a class='hidden_link' href='#req.dist-4.sentence-1'>.</a></div></div></div><div class='para' id='req.dist-5'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2459'>#</a></div><div class='texpara'><div id='req.dist-5.sentence-1' class='sentence'>The sequence of numbers
produced by repeated invocations of <span class='texttt'>d<span class='parenthesis'>(</span>g<span class='parenthesis'>)</span></span>
shall be independent of any invocation of
<span class='texttt'>os <span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span> d</span>
or of
any <span id=':const'><span class='texttt'><span class='keyword'>const</span></span></span> member function of <span class='texttt'>D</span>
between any of the invocations of <span class='texttt'>d<span class='parenthesis'>(</span>g<span class='parenthesis'>)</span></span><a class='hidden_link' href='#req.dist-5.sentence-1'>.</a></div></div></div><div class='para' id='req.dist-6'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2468'>#</a></div><div class='texpara'><div id='req.dist-6.sentence-1' class='sentence'>If a textual representation is written using <span class='texttt'>os <span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span> x</span>
and that representation is restored
into the same or a different object <span class='texttt'>y</span>
of the same type using <span class='texttt'>is <span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> y</span>,
repeated invocations of <span class='texttt'>y<span class='parenthesis'>(</span>g<span class='parenthesis'>)</span></span>
shall produce the same sequence of numbers
as would repeated invocations of <span class='texttt'>x<span class='parenthesis'>(</span>g<span class='parenthesis'>)</span></span><a class='hidden_link' href='#req.dist-6.sentence-1'>.</a></div></div></div><div class='para' id='req.dist-7'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-7'>7</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2477'>#</a></div><div class='texpara'><div id='req.dist-7.sentence-1' class='sentence'>It is unspecified whether <span class='texttt'>D<span class='operator'>&#x200b;::&#x200b;</span>param_<span class='shy'></span>type</span>
is declared as a (nested) <span id=':class'><span class='texttt'><span class='keyword'>class</span></span></span>
or via a <span id=':typedef'><span class='texttt'><span class='keyword'>typedef</span></span></span><a class='hidden_link' href='#req.dist-7.sentence-1'>.</a></div> <div id='req.dist-7.sentence-2' class='sentence'>In [rand],
declarations of <span class='texttt'>D<span class='operator'>&#x200b;::&#x200b;</span>param_<span class='shy'></span>type</span>
are in the form of <span id=':typedef_'><span class='texttt'><span class='keyword'>typedef</span></span></span>s
for convenience of exposition only<a class='hidden_link' href='#req.dist-7.sentence-2'>.</a></div></div></div><div class='para' id='req.dist-8'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-8'>8</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2486'>#</a></div><div class='texpara'><div id='req.dist-8.sentence-1' class='sentence'><span class='texttt'>P</span> shall meet the
<a href='utility.arg.requirements#:Cpp17CopyConstructible' title='16.4.4.2&emsp;Template argument requirements&emsp;[utility.arg.requirements]'><i >Cpp17CopyConstructible</i></a> (Table <a href='utility.arg.requirements#tab:cpp17.copyconstructible' title='Table 32: Cpp17CopyConstructible requirements (in addition to Cpp17MoveConstructible)'>32</a>),
<a href='utility.arg.requirements#:Cpp17CopyAssignable' title='16.4.4.2&emsp;Template argument requirements&emsp;[utility.arg.requirements]'><i >Cpp17CopyAssignable</i></a> (Table <a href='utility.arg.requirements#tab:cpp17.copyassignable' title='Table 34: Cpp17CopyAssignable requirements (in addition to Cpp17MoveAssignable)'>34</a>),
and
<a href='utility.arg.requirements#:Cpp17EqualityComparable' title='16.4.4.2&emsp;Template argument requirements&emsp;[utility.arg.requirements]'><i >Cpp17EqualityComparable</i></a> (Table <a href='utility.arg.requirements#tab:cpp17.equalitycomparable' title='Table 28: Cpp17EqualityComparable requirements'>28</a>) requirements<a class='hidden_link' href='#req.dist-8.sentence-1'>.</a></div></div></div><div class='para' id='req.dist-9'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-9'>9</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2493'>#</a></div><div class='texpara'><div id='req.dist-9.sentence-1' class='sentence'>For each of the constructors of <span class='texttt'>D</span>
taking arguments corresponding to parameters of the distribution,
<span class='texttt'>P</span> shall have a corresponding constructor
subject to the same requirements
and taking arguments identical in number, type, and default values<a class='hidden_link' href='#req.dist-9.sentence-1'>.</a></div> <div id='req.dist-9.sentence-2' class='sentence'>Moreover,
for each of the member functions of <span class='texttt'>D</span>
that return values corresponding to parameters of the distribution,
<span class='texttt'>P</span> shall have a corresponding member function
with the identical name, type, and semantics<a class='hidden_link' href='#req.dist-9.sentence-2'>.</a></div></div></div><div class='para' id='req.dist-10'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-10'>10</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2505'>#</a></div><div class='texpara'><div id='req.dist-10.sentence-1' class='sentence'><span class='texttt'>P</span> shall have a declaration of the form
<span class='codeblock'><span class='keyword'>using</span> distribution_type <span class='operator'>=</span>  D;
</span></div></div></div><div class='para' id='req.dist-11'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-11'>11</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2511'>#</a></div><div class='texpara'><div id='req.dist-11.sentence-1' class='sentence'>On hosted implementations,
the following expressions are well-formed and have the specified semantics<a class='hidden_link' href='#req.dist-11.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='req.dist-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#req.dist-itemdecl:1'>🔗</a></div><code class='itemdeclcode'>os <span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span> x
</code></div></div><div class='para' id='req.dist-12'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2520'>#</a></div><div class='texpara'><div id='req.dist-12.sentence-1' class='sentence'><i >Effects</i>: Writes to <span class='texttt'>os</span> a textual representation
for the parameters and the additional internal data of <span class='texttt'>x</span><a class='hidden_link' href='#req.dist-12.sentence-1'>.</a></div></div></div></div><div class='para' id='req.dist-13'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-13'>13</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2525'>#</a></div><div class='texpara'><div id='req.dist-13.sentence-1' class='sentence'><i >Postconditions</i>: The <span class='texttt'>os<span class='operator'>.</span><i >fmtflags</i></span> and fill character are unchanged<a class='hidden_link' href='#req.dist-13.sentence-1'>.</a></div></div></div></div><div class='para' id='req.dist-14'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-14'>14</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2529'>#</a></div><div class='texpara'><div id='req.dist-14.sentence-1' class='sentence'><i >Result</i>: reference to the type of <span class='texttt'>os</span><a class='hidden_link' href='#req.dist-14.sentence-1'>.</a></div></div></div></div><div class='para' id='req.dist-15'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-15'>15</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2533'>#</a></div><div class='texpara'><div id='req.dist-15.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>os</span><a class='hidden_link' href='#req.dist-15.sentence-1'>.</a></div></div></div></div><div class='texpara'><div class='itemdecl' id='req.dist-itemdecl:2'><div class='marginalizedparent'><a class='itemDeclLink' href='#req.dist-itemdecl:2'>🔗</a></div><code class='itemdeclcode'>is <span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> d
</code></div></div><div class='para' id='req.dist-16'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-16'>16</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2543'>#</a></div><div class='texpara'><div id='req.dist-16.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>is</span> provides a textual representation
that was previously written
using an <span class='texttt'>os</span> whose imbued locale
and whose type's template specialization arguments
<span class='texttt'>charT</span> and <span class='texttt'>traits</span>
were the same as those of <span class='texttt'>is</span><a class='hidden_link' href='#req.dist-16.sentence-1'>.</a></div></div></div></div><div class='para' id='req.dist-17'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-17'>17</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2552'>#</a></div><div class='texpara'><div id='req.dist-17.sentence-1' class='sentence'><i >Effects</i>: Restores from <span class='texttt'>is</span>
the parameters and additional internal data of the lvalue <span class='texttt'>d</span><a class='hidden_link' href='#req.dist-17.sentence-1'>.</a></div> <div id='req.dist-17.sentence-2' class='sentence'>If bad input is encountered,
ensures that <span class='texttt'>d</span> is unchanged by the operation
and
calls <span class='texttt'>is<span class='operator'>.</span>setstate<span class='parenthesis'>(</span>ios_<span class='shy'></span>base<span class='operator'>&#x200b;::&#x200b;</span>failbit<span class='parenthesis'>)</span></span>
(which may throw <span class='texttt'>ios_<span class='shy'></span>base<span class='operator'>&#x200b;::&#x200b;</span>failure</span> (<a href='iostate.flags' title='31.5.4.4&emsp;Flags functions'>[iostate.<span class='shy'></span>flags]</a>))<a class='hidden_link' href='#req.dist-17.sentence-2'>.</a></div></div></div></div><div class='para' id='req.dist-18'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-18'>18</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2562'>#</a></div><div class='texpara'><div id='req.dist-18.sentence-1' class='sentence'><i >Postconditions</i>: The <span class='texttt'>is<span class='operator'>.</span><i >fmtflags</i></span> are unchanged<a class='hidden_link' href='#req.dist-18.sentence-1'>.</a></div></div></div></div><div class='para' id='req.dist-19'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-19'>19</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2566'>#</a></div><div class='texpara'><div id='req.dist-19.sentence-1' class='sentence'><i >Result</i>: reference to the type of <span class='texttt'>is</span><a class='hidden_link' href='#req.dist-19.sentence-1'>.</a></div></div></div></div><div class='para' id='req.dist-20'><div class='marginalizedparent'><a class='marginalized' href='#req.dist-20'>20</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2570'>#</a></div><div class='texpara'><div id='req.dist-20.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>is</span><a class='hidden_link' href='#req.dist-20.sentence-1'>.</a></div></div></div></div><div class='texpara'></div></div></div><div id='eng' class='section'><h3 ><a class='secnum' href='#eng' style='min-width:80pt'>29.5.4</a> Random number engine class templates <a class='abbr_ref' href='rand.eng'>[rand.eng]</a></h3><div id='eng.general' class='section'><h4 ><a class='secnum' href='#eng.general' style='min-width:95pt'>29.5.4.1</a> General <a class='abbr_ref' href='rand.eng.general'>[rand.eng.general]</a></h4><div class='texpara'><a class='index' id=':random_number_generation,engines'></a></div><div class='para' id='eng.general-1'><div class='marginalizedparent'><a class='marginalized' href='#eng.general-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2594'>#</a></div><div class='texpara'><div id='eng.general-1.sentence-1' class='sentence'>Each type instantiated
from a class template specified in <a href='#eng' title='29.5.4&emsp;Random number engine class templates'>[rand.<span class='shy'></span>eng]</a>
meets the requirements
of a <a href='#req.eng' title='29.5.3.4&emsp;Random number engine requirements&emsp;[rand.req.eng]'>random number engine</a> type<a class='hidden_link' href='#eng.general-1.sentence-1'>.</a></div></div></div><div class='para' id='eng.general-2'><div class='marginalizedparent'><a class='marginalized' href='#eng.general-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2600'>#</a></div><div class='texpara'><div id='eng.general-2.sentence-1' class='sentence'>Except where specified otherwise,
the complexity of each function
specified in <a href='#eng' title='29.5.4&emsp;Random number engine class templates'>[rand.<span class='shy'></span>eng]</a>
is constant<a class='hidden_link' href='#eng.general-2.sentence-1'>.</a></div></div></div><div class='para' id='eng.general-3'><div class='marginalizedparent'><a class='marginalized' href='#eng.general-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2606'>#</a></div><div class='texpara'><div id='eng.general-3.sentence-1' class='sentence'>Except where specified otherwise,
no function described in <a href='#eng' title='29.5.4&emsp;Random number engine class templates'>[rand.<span class='shy'></span>eng]</a>
throws an exception<a class='hidden_link' href='#eng.general-3.sentence-1'>.</a></div></div></div><div class='para' id='eng.general-4'><div class='marginalizedparent'><a class='marginalized' href='#eng.general-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2611'>#</a></div><div class='texpara'><div id='eng.general-4.sentence-1' class='sentence'>Every function described in <a href='#eng' title='29.5.4&emsp;Random number engine class templates'>[rand.<span class='shy'></span>eng]</a>
that has a function parameter <span class='texttt'>q</span> of type <span class='texttt'>Sseq<span class='operator'>&amp;</span></span>
for a template type parameter named <span class='texttt'>Sseq</span>
that is different from type <span class='texttt'>seed_<span class='shy'></span>seq</span>
throws what and when the invocation of <span class='texttt'>q<span class='operator'>.</span>generate</span> throws<a class='hidden_link' href='#eng.general-4.sentence-1'>.</a></div></div></div><div class='para' id='eng.general-5'><div class='marginalizedparent'><a class='marginalized' href='#eng.general-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2618'>#</a></div><div class='texpara'><div id='eng.general-5.sentence-1' class='sentence'>Descriptions are provided in <a href='#eng' title='29.5.4&emsp;Random number engine class templates'>[rand.<span class='shy'></span>eng]</a>
only for engine operations
that are not described in <a href='#req.eng' title='29.5.3.4&emsp;Random number engine requirements'>[rand.<span class='shy'></span>req.<span class='shy'></span>eng]</a>
or for operations where there is additional semantic information<a class='hidden_link' href='#eng.general-5.sentence-1'>.</a></div> <div id='eng.general-5.sentence-2' class='sentence'>In particular,
declarations for copy constructors,
for copy assignment operators,
for streaming operators,
and for equality and inequality operators
are not shown in the synopses<a class='hidden_link' href='#eng.general-5.sentence-2'>.</a></div></div></div><div class='para' id='eng.general-6'><div class='marginalizedparent'><a class='marginalized' href='#eng.general-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2630'>#</a></div><div class='texpara'><div id='eng.general-6.sentence-1' class='sentence'>Each template specified in <a href='#eng' title='29.5.4&emsp;Random number engine class templates'>[rand.<span class='shy'></span>eng]</a>
requires one or more relationships,
involving the value(s) of its constant template parameter(s), to hold<a class='hidden_link' href='#eng.general-6.sentence-1'>.</a></div> <div id='eng.general-6.sentence-2' class='sentence'>A program instantiating any of these templates
is ill-formed
if any such required relationship fails to hold<a class='hidden_link' href='#eng.general-6.sentence-2'>.</a></div></div></div><div class='para' id='eng.general-7'><div class='marginalizedparent'><a class='marginalized' href='#eng.general-7'>7</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2638'>#</a></div><div class='texpara'><div id='eng.general-7.sentence-1' class='sentence'>For every random number engine and for every random number engine adaptor <span class='texttt'>X</span>
defined in <a href='#eng' title='29.5.4&emsp;Random number engine class templates'>[rand.<span class='shy'></span>eng]</a> and in <a href='#adapt' title='29.5.5&emsp;Random number engine adaptor class templates'>[rand.<span class='shy'></span>adapt]</a>:
<ul class='itemize'><li id='eng.general-7.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.general-7.1'>(7.1)</a></div>if the constructor
<span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class='keyword'>explicit</span> X<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</span>
is called with a type <span class='texttt'>Sseq</span> that does not qualify as a seed sequence, then this
constructor shall not participate in overload resolution;</li><li id='eng.general-7.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.general-7.2'>(7.2)</a></div>if the member function
<span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class='keyword'>void</span> seed<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</span>
is called with a type <span class='texttt'>Sseq</span> that does not qualify as a seed sequence, then this
function shall not participate in overload resolution<a class='hidden_link' href='#eng.general-7.sentence-1'>.</a></li></ul></div></div><div class='texpara'><div id='eng.general-7.sentence-2' class='sentence'>The extent to which an implementation determines that a type cannot be a seed sequence
is unspecified, except that as a minimum a type shall not qualify as a seed sequence
if it is implicitly convertible to <span class='texttt'>X<span class='operator'>&#x200b;::&#x200b;</span>result_<span class='shy'></span>type</span><a class='hidden_link' href='#eng.general-7.sentence-2'>.</a></div></div></div></div><div id='eng.lcong' class='section'><h4 ><a class='secnum' href='#eng.lcong' style='min-width:95pt'>29.5.4.2</a> Class template <span class='texttt'>linear_<span class='shy'></span>congruential_<span class='shy'></span>engine</span> <a class='abbr_ref' href='rand.eng.lcong'>[rand.eng.lcong]</a></h4><div class='texpara'><a class='index' id='lib:linear_congruential_engine'></a></div><div class='para' id='eng.lcong-1'><div class='marginalizedparent'><a class='marginalized' href='#eng.lcong-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2669'>#</a></div><div class='texpara'><div id='eng.lcong-1.sentence-1' class='sentence'>A <span class='texttt'>linear_<span class='shy'></span>congruential_<span class='shy'></span>engine</span> random number engine
produces unsigned integer random numbers<a class='hidden_link' href='#eng.lcong-1.sentence-1'>.</a></div> <div id='eng.lcong-1.sentence-2' class='sentence'>The state <span class='texttt'>x</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span>
of a <span class='texttt'>linear_<span class='shy'></span>congruential_<span class='shy'></span>engine</span> object <span class='texttt'>x</span>
is of size <span class='math'>1</span>
and consists of a single integer<a class='hidden_link' href='#eng.lcong-1.sentence-2'>.</a></div> <div id='eng.lcong-1.sentence-3' class='sentence'>The transition algorithm
is a modular linear function of the form
<span class='math'><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-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">T</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">A</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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.225em; padding-bottom: 0.225em;">x</span></span></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></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.225em; padding-bottom: 0.225em;">x</span></span></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">c</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span></span></span></span></span>;
the generation algorithm
is <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.519em; padding-bottom: 0.298em;">G</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">A</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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.225em; padding-bottom: 0.225em;">x</span></span></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.225em;">x</span></span></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span></span></span></span></span><a class='hidden_link' href='#eng.lcong-1.sentence-3'>.</a></div></div><div class='texpara'><span id='lib:linear_congruential_engine,result_type'><span id='lib:result_type,linear_congruential_engine'><span id='lib:linear_congruential_engine_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:linear_congruential_engine_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UIntType, UIntType a, UIntType c, UIntType m<span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> linear_congruential_engine <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> UIntType;

    <span class='comment'>// engine characteristics</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type multiplier <span class='operator'>=</span> a;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type increment <span class='operator'>=</span> c;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type modulus <span class='operator'>=</span> m;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> c <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0u</span> <span class='operator'>?</span> <span class='literal'>1u</span><span class='operator'>:</span> <span class='literal'>0u</span>; <span class='curlybracket'>}</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> m <span class='operator'>-</span> <span class='literal'>1u</span>; <span class='curlybracket'>}</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type default_seed <span class='operator'>=</span> <span class='literal'>1u</span>;

    <span class='comment'>// constructors and seeding functions</span>
    <span class="added">constexpr </span>linear_congruential_engine<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> linear_congruential_engine<span class='parenthesis'>(</span>default_seed<span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> linear_congruential_engine<span class='parenthesis'>(</span>result_type s<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>explicit</span> linear_congruential_engine<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span>result_type s <span class='operator'>=</span> default_seed<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> linear_congruential_engine<span class='operator'>&amp;</span> x,
                           <span class='keyword'>const</span> linear_congruential_engine<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> discard<span class='parenthesis'>(</span><span class='keyword'>unsigned</span> <span class='keyword'>long</span> <span class='keyword'>long</span> z<span class='parenthesis'>)</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os,            <span class='comment'>// hosted</span>
                   <span class='keyword'>const</span> linear_congruential_engine<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is,            <span class='comment'>// hosted</span>
                   linear_congruential_engine<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='para' id='eng.lcong-2'><div class='marginalizedparent'><a class='marginalized' href='#eng.lcong-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2728'>#</a></div><div class='texpara'><div id='eng.lcong-2.sentence-1' class='sentence'>If the template parameter
<span class='texttt'>m</span> is <span class='math'>0</span>,
the modulus <span class='math'><span class='mathalpha'>m</span></span>
used throughout <a href='#eng.lcong' title='29.5.4.2&emsp;Class template linear_&shy;congruential_&shy;engine'>[rand.<span class='shy'></span>eng.<span class='shy'></span>lcong]</a>
is <span class='texttt'>numeric_<span class='shy'></span>limits<span class='anglebracket'>&lt;</span>result_<span class='shy'></span>type<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>max<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> plus <span class='math'>1</span><a class='hidden_link' href='#eng.lcong-2.sentence-1'>.</a></div> <div id='eng.lcong-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#eng.lcong-note-1'>1</a></i>:&ensp;<div id='eng.lcong-2.sentence-2' class='sentence'><span class='math'><span class='mathalpha'>m</span></span> need not be representable
 as a value of type <span class='texttt'>result_<span class='shy'></span>type</span><a class='hidden_link' href='#eng.lcong-2.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='eng.lcong-3'><div class='marginalizedparent'><a class='marginalized' href='#eng.lcong-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2739'>#</a></div><div class='texpara'><div id='eng.lcong-3.sentence-1' class='sentence'>If the template parameter
<span class='texttt'>m</span> is not <span class='math'>0</span>,
the following relations shall hold:
  <span class='texttt'>a <span class='anglebracket'>&lt;</span> m</span>
and
  <span class='texttt'>c <span class='anglebracket'>&lt;</span> m</span><a class='hidden_link' href='#eng.lcong-3.sentence-1'>.</a></div></div></div><div class='para' id='eng.lcong-4'><div class='marginalizedparent'><a class='marginalized' href='#eng.lcong-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2747'>#</a></div><div class='texpara'><div id='eng.lcong-4.sentence-1' class='sentence'>The textual representation
consists of
the value of <span class='texttt'>x</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span><a class='hidden_link' href='#eng.lcong-4.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:linear_congruential_engine,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:linear_congruential_engine,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> linear_congruential_engine<span class='parenthesis'>(</span>result_type s<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='eng.lcong-5'><div class='marginalizedparent'><a class='marginalized' href='#eng.lcong-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2758'>#</a></div><div class='texpara'><div id='eng.lcong-5.sentence-1' class='sentence'><i >Effects</i>: If <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">c</span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span></span></span></span></span> is <span class='math'>0</span> and <span class='math'><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.225em; padding-bottom: 0.298em;">s</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span></span></span></span></span> is <span class='math'>0</span>,
 sets the engine's state to <span class='math'>1</span>,
 otherwise sets the engine's state to <span class='math'><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.225em; padding-bottom: 0.298em;">s</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span></span></span></span></span><a class='hidden_link' href='#eng.lcong-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:linear_congruential_engine,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:linear_congruential_engine,constructor_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>explicit</span> linear_congruential_engine<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='eng.lcong-6'><div class='marginalizedparent'><a class='marginalized' href='#eng.lcong-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2771'>#</a></div><div class='texpara'><div id='eng.lcong-6.sentence-1' class='sentence'><i >Effects</i>: With
 <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-mrow MJXc-space3"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">⌈</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mfrac"><span class="mjx-box MJXc-stacked" style="width: 2.108em; padding: 0px 0.12em;"><span class="mjx-numerator" style="font-size: 70.7%; width: 2.981em; top: -1.619em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 83.3%; vertical-align: -0.267em; padding-right: 0.06em;"><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 class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span></span></span><span class="mjx-denominator" style="font-size: 70.7%; width: 2.981em; bottom: -0.687em;"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">32</span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 2.108em;" class="mjx-line"></span></span><span style="height: 1.631em; vertical-align: -0.486em;" class="mjx-vsize"></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">⌉</span></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span>
 and <span class='math'><span class='mathalpha'>a</span></span> an array (or equivalent)
 of length <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">3</span></span></span></span></span></span>,
 invokes <span class='texttt'>q<span class='operator'>.</span>generate<span class='parenthesis'>(</span><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span>, <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">3</span></span></span></span></span></span><span class='parenthesis'>)</span></span>
 and then computes
 <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</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-mrow MJXc-space3"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">(</span></span><span class="mjx-mrow"><span class="mjx-munderover"><span class="mjx-base"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">∑</span></span></span><span class="mjx-stack" style="vertical-align: -0.31em;"><span class="mjx-sup" style="font-size: 70.7%; padding-bottom: 0.351em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span><span class="mjx-sub" style="font-size: 70.7%; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><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-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;">32</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">)</span></span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span></span></span></span></span><a class='hidden_link' href='#eng.lcong-6.sentence-1'>.</a></div> <div id='eng.lcong-6.sentence-2' class='sentence'>If <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">c</span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span></span></span></span></span> is <span class='math'>0</span> and <span class='math'><span class='mathalpha'>S</span></span> is <span class='math'>0</span>,
 sets the engine's state to <span class='math'>1</span>,
 else sets the engine's state
 to <span class='math'><span class='mathalpha'>S</span></span><a class='hidden_link' href='#eng.lcong-6.sentence-2'>.</a></div></div></div></div></div><div id='eng.mers' class='section'><h4 ><a class='secnum' href='#eng.mers' style='min-width:95pt'>29.5.4.3</a> Class template <span class='texttt'>mersenne_<span class='shy'></span>twister_<span class='shy'></span>engine</span> <a class='abbr_ref' href='rand.eng.mers'>[rand.eng.mers]</a></h4><div class='texpara'><a class='index' id='lib:mersenne_twister_engine'></a></div><div class='para' id='eng.mers-1'><div class='marginalizedparent'><a class='marginalized' href='#eng.mers-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2792'>#</a></div><div class='texpara'><div id='eng.mers-1.sentence-1' class='sentence'>A <span class='texttt'>mersenne_<span class='shy'></span>twister_<span class='shy'></span>engine</span> random number
engine<a class='footnoteref' href='#footnote-243' id='footnoteref-243' title='The name of this engine refers, in part, to a property of its period: For properly-selected values of the parameters, the period is closely related to a large Mersenne prime number.'>243</a>
produces unsigned integer random numbers
in the closed interval <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">[</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span><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></span><a class='hidden_link' href='#eng.mers-1.sentence-1'>.</a></div> <div id='eng.mers-1.sentence-2' class='sentence'>The
state
<span class='texttt'>x</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span>
of a <span class='texttt'>mersenne_<span class='shy'></span>twister_<span class='shy'></span>engine</span> object <span class='texttt'>x</span>
is of size <span class='math'><span class='mathalpha'>n</span></span>
and consists of a sequence <span class='math'><span class='mathalpha'>X</span></span>
of <span class='math'><span class='mathalpha'>n</span></span> values of the type delivered by <span class='texttt'>x</span>;
all subscripts applied to <span class='math'><span class='mathalpha'>X</span></span> are to be taken modulo <span class='math'><span class='mathalpha'>n</span></span><a class='hidden_link' href='#eng.mers-1.sentence-2'>.</a></div></div></div><div class='para' id='eng.mers-2'><div class='marginalizedparent'><a class='marginalized' href='#eng.mers-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2811'>#</a></div><div class='texpara'><div id='eng.mers-2.sentence-1' class='sentence'>The transition algorithm
employs a twisted generalized feedback shift register
defined by shift values <span class='math'><span class='mathalpha'>n</span></span> and <span class='math'><span class='mathalpha'>m</span></span>, a twist value <span class='math'><span class='mathalpha'>r</span></span>,
and a conditional xor-mask <span class='math'><span class='mathalpha'>a</span></span><a class='hidden_link' href='#eng.mers-2.sentence-1'>.</a></div> <div id='eng.mers-2.sentence-2' class='sentence'>To improve the uniformity of the result,
the bits of the raw shift register are additionally <a class='hidden_link' href='#def:tempered' id='def:tempered'><i>tempered</i></a>
(i.e., scrambled) according to a bit-scrambling matrix
defined by values <span class='math'><span class='mathalpha'>u</span></span>, <span class='math'><span class='mathalpha'>d</span></span>, <span class='math'><span class='mathalpha'>s</span></span>, <span class='math'><span class='mathalpha'>b</span></span>, <span class='math'><span class='mathalpha'>t</span></span>, <span class='math'><span class='mathalpha'>c</span></span>, and <span class='math'>ℓ</span><a class='hidden_link' href='#eng.mers-2.sentence-2'>.</a></div></div><div class='texpara'><div id='eng.mers-2.sentence-3' class='sentence'>The state transition is performed as follows:
<ul class='itemize'><li id='eng.mers-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.mers-2.1'>(2.1)</a></div><div class='texpara'><div id='eng.mers-2.1.sentence-1' class='sentence'>Concatenate
     the upper <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span> bits of <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span></span></span></span></span>
   with
     the lower <span class='math'><span class='mathalpha'>r</span></span> bits of <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span></span></span></span></span>
   to obtain an unsigned integer value <span class='math'><span class='mathalpha'>Y</span></span><a class='hidden_link' href='#eng.mers-2.1.sentence-1'>.</a></div></div></li><li id='eng.mers-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.mers-2.2'>(2.2)</a></div><div class='texpara'><div id='eng.mers-2.2.sentence-1' class='sentence'>With <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">α</span></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.182em;">Y</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">d</span></span></span></span></span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span><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></span>,
   set <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span> to
     <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.182em;">Y</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">h</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.041em;">f</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">α</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#eng.mers-2.2.sentence-1'>.</a></div></div></li></ul></div> <div id='eng.mers-2.sentence-4' class='sentence'>
The sequence <span class='math'><span class='mathalpha'>X</span></span> is initialized
with the help of an initialization multiplier <span class='math'><span class='mathalpha'>f</span></span><a class='hidden_link' href='#eng.mers-2.sentence-4'>.</a></div></div></div><div class='para' id='eng.mers-3'><div class='marginalizedparent'><a class='marginalized' href='#eng.mers-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2837'>#</a></div><div class='texpara'><div id='eng.mers-3.sentence-1' class='sentence'>The generation algorithm
 determines the unsigned integer values <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">2</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">4</span></span></span></span></span></span></span></span> as follows,
 then delivers <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">4</span></span></span></span></span></span></span></span> as its result:
<ul class='itemize'><li id='eng.mers-3.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.mers-3.1'>(3.1)</a></div><div class='texpara'><div id='eng.mers-3.1.sentence-1' class='sentence'>Let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</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-msubsup MJXc-space3"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">(</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">h</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.041em;">f</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">u</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">d</span></span></span></span></span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.003em;">d</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">)</span></span></span></span></span></span></span></span><a class='hidden_link' href='#eng.mers-3.1.sentence-1'>.</a></div></div></li><li id='eng.mers-3.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.mers-3.2'>(3.2)</a></div><div class='texpara'><div id='eng.mers-3.2.sentence-1' class='sentence'>Let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">2</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-msubsup MJXc-space3"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</span></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">(</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</span></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">l</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">h</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.041em;">f</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span></span></span></span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">d</span></span></span></span></span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">)</span></span></span></span></span></span></span></span><a class='hidden_link' href='#eng.mers-3.2.sentence-1'>.</a></div></div></li><li id='eng.mers-3.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.mers-3.3'>(3.3)</a></div><div class='texpara'><div id='eng.mers-3.3.sentence-1' class='sentence'>Let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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-msubsup MJXc-space3"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">2</span></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">(</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">2</span></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">l</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">h</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.041em;">f</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span></span></span></span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">d</span></span></span></span></span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">c</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">)</span></span></span></span></span></span></span></span><a class='hidden_link' href='#eng.mers-3.3.sentence-1'>.</a></div></div></li><li id='eng.mers-3.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.mers-3.4'>(3.4)</a></div><div class='texpara'><div id='eng.mers-3.4.sentence-1' class='sentence'>Let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">4</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-msubsup MJXc-space3"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">h</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.041em;">f</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;">ℓ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><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></span><a class='hidden_link' href='#eng.mers-3.4.sentence-1'>.</a></div></div></li></ul></div></div><div class='texpara'><span id='lib:mersenne_twister_engine,result_type'><span id='lib:result_type,mersenne_twister_engine'><span id='lib:mersenne_twister_engine_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mersenne_twister_engine_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UIntType, size_t w, size_t n, size_t m, size_t r,
           UIntType a, size_t u, UIntType d, size_t s,
           UIntType b, size_t t,
           UIntType c, size_t l, UIntType f<span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> mersenne_twister_engine <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> UIntType;

    <span class='comment'>// engine characteristics</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t word_size <span class='operator'>=</span> w;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t state_size <span class='operator'>=</span> n;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t shift_size <span class='operator'>=</span> m;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t mask_bits <span class='operator'>=</span> r;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> UIntType xor_mask <span class='operator'>=</span> a;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t tempering_u <span class='operator'>=</span> u;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> UIntType tempering_d <span class='operator'>=</span> d;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t tempering_s <span class='operator'>=</span> s;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> UIntType tempering_b <span class='operator'>=</span> b;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t tempering_t <span class='operator'>=</span> t;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> UIntType tempering_c <span class='operator'>=</span> c;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t tempering_l <span class='operator'>=</span> l;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> UIntType initialization_multiplier <span class='operator'>=</span> f;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> <span class='literal'>0</span>; <span class='curlybracket'>}</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span>  <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span>; <span class='curlybracket'>}</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type default_seed <span class='operator'>=</span> <span class='literal'>5489u</span>;

    <span class='comment'>// constructors and seeding functions</span>
    <span class="added">constexpr </span>mersenne_twister_engine<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> mersenne_twister_engine<span class='parenthesis'>(</span>default_seed<span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> mersenne_twister_engine<span class='parenthesis'>(</span>result_type value<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>explicit</span> mersenne_twister_engine<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span>result_type value <span class='operator'>=</span> default_seed<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> mersenne_twister_engine<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> mersenne_twister_engine<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> discard<span class='parenthesis'>(</span><span class='keyword'>unsigned</span> <span class='keyword'>long</span> <span class='keyword'>long</span> z<span class='parenthesis'>)</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os,            <span class='comment'>// hosted</span>
                   <span class='keyword'>const</span> mersenne_twister_engine<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is,            <span class='comment'>// hosted</span>
                   mersenne_twister_engine<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='para' id='eng.mers-4'><div class='marginalizedparent'><a class='marginalized' href='#eng.mers-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2910'>#</a></div><div class='texpara'><div id='eng.mers-4.sentence-1' class='sentence'>The following relations shall hold:
  <span class='texttt'><span class='literal'>0</span> <span class='anglebracket'>&lt;</span> m</span>,
  <span class='texttt'>m <span class='anglebracket'>&lt;</span><span class='operator'>=</span> n</span>,
  <span class='texttt'><span class='literal'>2u</span> <span class='anglebracket'>&lt;</span> w</span>,
  <span class='texttt'>r <span class='anglebracket'>&lt;</span><span class='operator'>=</span> w</span>,
  <span class='texttt'>u <span class='anglebracket'>&lt;</span><span class='operator'>=</span> w</span>,
  <span class='texttt'>s <span class='anglebracket'>&lt;</span><span class='operator'>=</span> w</span>,
  <span class='texttt'>t <span class='anglebracket'>&lt;</span><span class='operator'>=</span> w</span>,
  <span class='texttt'>l <span class='anglebracket'>&lt;</span><span class='operator'>=</span> w</span>,
  <span class='texttt'>w <span class='anglebracket'>&lt;</span><span class='operator'>=</span> numeric_<span class='shy'></span>limits<span class='anglebracket'>&lt;</span>UIntType<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>digits</span>,
  <span class='texttt'>a <span class='anglebracket'>&lt;</span><span class='operator'>=</span> <span class='parenthesis'>(</span><span class='literal'>1u</span> <span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span> w<span class='parenthesis'>)</span> <span class='operator'>-</span> <span class='literal'>1u</span></span>,
  <span class='texttt'>b <span class='anglebracket'>&lt;</span><span class='operator'>=</span> <span class='parenthesis'>(</span><span class='literal'>1u</span> <span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span> w<span class='parenthesis'>)</span> <span class='operator'>-</span> <span class='literal'>1u</span></span>,
  <span class='texttt'>c <span class='anglebracket'>&lt;</span><span class='operator'>=</span> <span class='parenthesis'>(</span><span class='literal'>1u</span> <span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span> w<span class='parenthesis'>)</span> <span class='operator'>-</span> <span class='literal'>1u</span></span>,
  <span class='texttt'>d <span class='anglebracket'>&lt;</span><span class='operator'>=</span> <span class='parenthesis'>(</span><span class='literal'>1u</span> <span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span> w<span class='parenthesis'>)</span> <span class='operator'>-</span> <span class='literal'>1u</span></span>,
and
  <span class='texttt'>f <span class='anglebracket'>&lt;</span><span class='operator'>=</span> <span class='parenthesis'>(</span><span class='literal'>1u</span> <span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span> w<span class='parenthesis'>)</span> <span class='operator'>-</span> <span class='literal'>1u</span></span><a class='hidden_link' href='#eng.mers-4.sentence-1'>.</a></div></div></div><div class='para' id='eng.mers-5'><div class='marginalizedparent'><a class='marginalized' href='#eng.mers-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2928'>#</a></div><div class='texpara'><div id='eng.mers-5.sentence-1' class='sentence'>The textual representation
of <span class='texttt'>x</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span>
consists of the values of <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span></span></span></span></span>,
in that order<a class='hidden_link' href='#eng.mers-5.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:mersenne_twister_engine,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mersenne_twister_engine,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> mersenne_twister_engine<span class='parenthesis'>(</span>result_type value<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='eng.mers-6'><div class='marginalizedparent'><a class='marginalized' href='#eng.mers-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2940'>#</a></div><div class='texpara'><div id='eng.mers-6.sentence-1' class='sentence'><i >Effects</i>: Sets <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span></span></span></span></span> to <span class='math'><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;">value</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span></span></span></span></span><a class='hidden_link' href='#eng.mers-6.sentence-1'>.</a></div> <div id='eng.mers-6.sentence-2' class='sentence'>Then, iteratively for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</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;">1</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span>, sets <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span> to
<br><span class='math'><span class="mjx-chtml MJXc-display" style="text-align: center;"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">[</span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.519em; padding-right: 0.06em;">f</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">(</span></span></span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">(</span></span></span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">h</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.041em;">f</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">2</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">)</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">)</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">]</span></span></span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span><span class="mjx-mspace" style="width: 0.278em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mstyle"><span class="mjx-mrow"></span></span><a class="hidden_link" href="#eng.mers-6.sentence-2"><span class="mjx-mstyle"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">.</span></span></span></span></a></span></span></span></span></div></div></div></div><div class='para' id='eng.mers-7'><div class='marginalizedparent'><a class='marginalized' href='#eng.mers-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2953'>#</a></div><div class='texpara'><div id='eng.mers-7.sentence-1' class='sentence'><i >Complexity</i>: <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><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></span><a class='hidden_link' href='#eng.mers-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:mersenne_twister_engine,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mersenne_twister_engine,constructor_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>explicit</span> mersenne_twister_engine<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='eng.mers-8'><div class='marginalizedparent'><a class='marginalized' href='#eng.mers-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2964'>#</a></div><div class='texpara'><div id='eng.mers-8.sentence-1' class='sentence'><i >Effects</i>: With
 <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-mrow MJXc-space3"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">⌈</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</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;">32</span></span></span><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 class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span>
 and <span class='math'><span class='mathalpha'>a</span></span> an array (or equivalent)
 of length <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span>,
 invokes <span class='texttt'>q<span class='operator'>.</span>generate<span class='parenthesis'>(</span><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span>, <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span><span class='parenthesis'>)</span></span>
 and then, iteratively for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</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-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span>,
 sets <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span>
 to <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">(</span></span><span class="mjx-mrow"><span class="mjx-munderover"><span class="mjx-base"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">∑</span></span></span><span class="mjx-stack" style="vertical-align: -0.31em;"><span class="mjx-sup" style="font-size: 70.7%; padding-bottom: 0.351em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span><span class="mjx-sub" style="font-size: 70.7%; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.275em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><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-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;">32</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">)</span></span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span></span></span></span></span><a class='hidden_link' href='#eng.mers-8.sentence-1'>.</a></div> <div id='eng.mers-8.sentence-2' class='sentence'>Finally,
 if the most significant <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span> bits of <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span></span></span></span></span>
 are zero,
 and if each of the other resulting <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span> is <span class='math'>0</span>,
 changes <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span></span></span></span></span>
 to <span class='math'><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-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span></span></span></span></span><a class='hidden_link' href='#eng.mers-8.sentence-2'>.</a></div></div></div></div><div class='footnoteSeparator'></div><div class='footnote' id='footnote-243'><div class='texpara'><a class='footnotenum' href='#footnote-243'>243)</a><a class='footnoteBacklink' href='#footnoteref-243'>243)</a> <div id='footnote-243.sentence-1' class='sentence'>The name of this engine refers, in part, to a property of its period:
 For properly-selected values of the parameters,
 the period is closely related to a large Mersenne prime number<a class='hidden_link' href='#footnote-243.sentence-1'>.</a></div></div></div></div><div id='eng.sub' class='section'><h4 ><a class='secnum' href='#eng.sub' style='min-width:95pt'>29.5.4.4</a> Class template <span class='texttt'>subtract_<span class='shy'></span>with_<span class='shy'></span>carry_<span class='shy'></span>engine</span> <a class='abbr_ref' href='rand.eng.sub'>[rand.eng.sub]</a></h4><div class='texpara'><a class='index' id='lib:subtract_with_carry_engine'></a></div><div class='para' id='eng.sub-1'><div class='marginalizedparent'><a class='marginalized' href='#eng.sub-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2988'>#</a></div><div class='texpara'><div id='eng.sub-1.sentence-1' class='sentence'>A <span class='texttt'>subtract_<span class='shy'></span>with_<span class='shy'></span>carry_<span class='shy'></span>engine</span> random number engine
produces unsigned integer random numbers<a class='hidden_link' href='#eng.sub-1.sentence-1'>.</a></div></div></div><div class='para' id='eng.sub-2'><div class='marginalizedparent'><a class='marginalized' href='#eng.sub-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L2992'>#</a></div><div class='texpara'><div id='eng.sub-2.sentence-1' class='sentence'>The state <span class='texttt'>x</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span>
of a <span class='texttt'>subtract_<span class='shy'></span>with_<span class='shy'></span>carry_<span class='shy'></span>engine</span> object <span class='texttt'>x</span>
is of size
<span class='math'><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-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span><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></span>,
and consists of
a sequence <span class='math'><span class='mathalpha'>X</span></span> of <span class='math'><span class='mathalpha'>r</span></span> integer values <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≤</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-msubsup MJXc-space3"><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span></span></span></span></span>;
all subscripts applied to <span class='math'><span class='mathalpha'>X</span></span> are to be taken modulo <span class='math'><span class='mathalpha'>r</span></span><a class='hidden_link' href='#eng.sub-2.sentence-1'>.</a></div> <div id='eng.sub-2.sentence-2' class='sentence'>The state <span class='texttt'>x</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span>
additionally consists of an integer <span class='math'><span class='mathalpha'>c</span></span>
(known as the <a class='hidden_link' href='#def:carry' id='def:carry'><i>carry</i></a>)
whose value is either <span class='math'>0</span> or <span class='math'>1</span><a class='hidden_link' href='#eng.sub-2.sentence-2'>.</a></div></div></div><div class='para' id='eng.sub-3'><div class='marginalizedparent'><a class='marginalized' href='#eng.sub-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3005'>#</a></div><div class='texpara'><div id='eng.sub-3.sentence-1' class='sentence'>The state transition
is performed as follows:
<ul class='itemize'><li id='eng.sub-3.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.sub-3.1'>(3.1)</a></div><div class='texpara'><div id='eng.sub-3.1.sentence-1' class='sentence'>Let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.182em;">Y</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-msubsup MJXc-space3"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">c</span></span></span></span></span></span><a class='hidden_link' href='#eng.sub-3.1.sentence-1'>.</a></div></div></li><li id='eng.sub-3.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.sub-3.2'>(3.2)</a></div><div class='texpara'><div id='eng.sub-3.2.sentence-1' class='sentence'>Set <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span> to <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.182em;">Y</span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span></span></span></span></span><a class='hidden_link' href='#eng.sub-3.2.sentence-1'>.</a></div> <div id='eng.sub-3.2.sentence-2' class='sentence'>Set <span class='math'><span class='mathalpha'>c</span></span> to 1 if <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.182em;">Y</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</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;">0</span></span></span></span></span></span>,
   otherwise set <span class='math'><span class='mathalpha'>c</span></span> to 0<a class='hidden_link' href='#eng.sub-3.2.sentence-2'>.</a></div></div></li></ul></div> <div id='eng.sub-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#eng.sub-note-1'>1</a></i>:&ensp;<div id='eng.sub-3.sentence-2' class='sentence'>This algorithm corresponds
 to a modular linear function
 of the form
 <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">T</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">A</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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.225em; padding-bottom: 0.225em;">x</span></span></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></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.225em; padding-bottom: 0.225em;">x</span></span></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span></span></span></span>,
 where <span class='math'><span class='mathalpha'>b</span></span> is of the form
 <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span>
 and <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span></span></span></span></span><a class='hidden_link' href='#eng.sub-3.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='eng.sub-4'><div class='marginalizedparent'><a class='marginalized' href='#eng.sub-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3026'>#</a></div><div class='texpara'><div id='eng.sub-4.sentence-1' class='sentence'>The generation algorithm
is given by <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.519em; padding-bottom: 0.298em;">G</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">A</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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.225em; padding-bottom: 0.225em;">x</span></span></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</span></span></span></span></span></span>,
where <span class='math'><span class='mathalpha'>y</span></span> is the value produced as a result
of advancing the engine's state as described above<a class='hidden_link' href='#eng.sub-4.sentence-1'>.</a></div></div><div class='texpara'><span id='lib:subtract_with_carry_engine,result_type'><span id='lib:result_type,subtract_with_carry_engine'><span id='lib:subtract_with_carry_engine_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:subtract_with_carry_engine_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UIntType, size_t w, size_t s, size_t r<span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> subtract_with_carry_engine <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> UIntType;

    <span class='comment'>// engine characteristics</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t word_size <span class='operator'>=</span> w;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t short_lag <span class='operator'>=</span> s;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t long_lag <span class='operator'>=</span> r;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> <span class='literal'>0</span>; <span class='curlybracket'>}</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span>; <span class='curlybracket'>}</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> uint_least32_t default_seed <span class='operator'>=</span> <span class='literal'>19780503u</span>;

    <span class='comment'>// constructors and seeding functions</span>
    <span class="added">constexpr </span>subtract_with_carry_engine<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> subtract_with_carry_engine<span class='parenthesis'>(</span><span class='literal'>0u</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> subtract_with_carry_engine<span class='parenthesis'>(</span>result_type value<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>explicit</span> subtract_with_carry_engine<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span>result_type value <span class='operator'>=</span> <span class='literal'>0u</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> subtract_with_carry_engine<span class='operator'>&amp;</span> x,
                           <span class='keyword'>const</span> subtract_with_carry_engine<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> discard<span class='parenthesis'>(</span><span class='keyword'>unsigned</span> <span class='keyword'>long</span> <span class='keyword'>long</span> z<span class='parenthesis'>)</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os,            <span class='comment'>// hosted</span>
                   <span class='keyword'>const</span> subtract_with_carry_engine<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is,            <span class='comment'>// hosted</span>
                   subtract_with_carry_engine<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='para' id='eng.sub-5'><div class='marginalizedparent'><a class='marginalized' href='#eng.sub-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3078'>#</a></div><div class='texpara'><div id='eng.sub-5.sentence-1' class='sentence'>The following relations shall hold:
  <span class='texttt'><span class='literal'>0u</span> <span class='anglebracket'>&lt;</span> s</span>,
  <span class='texttt'>s <span class='anglebracket'>&lt;</span> r</span>,
  <span class='texttt'><span class='literal'>0</span> <span class='anglebracket'>&lt;</span> w</span>,
and
  <span class='texttt'>w <span class='anglebracket'>&lt;</span><span class='operator'>=</span> numeric_<span class='shy'></span>limits<span class='anglebracket'>&lt;</span>UIntType<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>digits</span><a class='hidden_link' href='#eng.sub-5.sentence-1'>.</a></div></div></div><div class='para' id='eng.sub-6'><div class='marginalizedparent'><a class='marginalized' href='#eng.sub-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3086'>#</a></div><div class='texpara'><div id='eng.sub-6.sentence-1' class='sentence'>The textual representation
consists of the values of
 <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span></span></span></span></span>,
in that order, followed by <span class='math'><span class='mathalpha'>c</span></span><a class='hidden_link' href='#eng.sub-6.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:subtract_with_carry_engine,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:subtract_with_carry_engine,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> subtract_with_carry_engine<span class='parenthesis'>(</span>result_type value<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='eng.sub-7'><div class='marginalizedparent'><a class='marginalized' href='#eng.sub-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3098'>#</a></div><div class='texpara'><div id='eng.sub-7.sentence-1' class='sentence'><i >Effects</i>: Sets the values of
 <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span></span></span></span></span>,
 in that order, as specified below<a class='hidden_link' href='#eng.sub-7.sentence-1'>.</a></div> <div id='eng.sub-7.sentence-2' class='sentence'>If <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span></span></span></span></span> is then <span class='math'>0</span>,
 sets <span class='math'><span class='mathalpha'>c</span></span> to <span class='math'>1</span>;
 otherwise sets <span class='math'><span class='mathalpha'>c</span></span> to <span class='math'>0</span><a class='hidden_link' href='#eng.sub-7.sentence-2'>.</a></div></div><div class='texpara'><div id='eng.sub-7.sentence-3' class='sentence'>To set the values <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span>,
 first construct <span class='texttt'>e</span>, a <span class='texttt'>linear_<span class='shy'></span>congruential_<span class='shy'></span>engine</span> object,
 as if by the following definition:
<span class='codeblock'>linear_congruential_engine<span class='anglebracket'>&lt;</span>uint_least32_t, <span class='literal'>40014u</span>, <span class='literal'>0u</span>, <span class='literal'>2147483563u</span><span class='anglebracket'>&gt;</span> e<span class='parenthesis'>(</span>
  value <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0u</span> <span class='operator'>?</span> default_seed <span class='operator'>:</span> <span class='keyword'>static_cast</span><span class='anglebracket'>&lt;</span>uint_least32_t<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>value <span class='operator'>%</span> <span class='literal'>2147483563u</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div> <div id='eng.sub-7.sentence-4' class='sentence'>
 Then, to set each <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span>,
 obtain new values <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span></span></span></span></span>
 from <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">⌈</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</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;">32</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">⌉</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span> successive invocations
 of <span class='texttt'>e</span><a class='hidden_link' href='#eng.sub-7.sentence-4'>.</a></div> <div id='eng.sub-7.sentence-5' class='sentence'>Set <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span> to <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">(</span></span><span class="mjx-mrow"><span class="mjx-munderover"><span class="mjx-base"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">∑</span></span></span><span class="mjx-stack" style="vertical-align: -0.31em;"><span class="mjx-sup" style="font-size: 70.7%; padding-bottom: 0.351em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span><span class="mjx-sub" style="font-size: 70.7%; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><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-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;">32</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">)</span></span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span></span></span></span></span><a class='hidden_link' href='#eng.sub-7.sentence-5'>.</a></div></div></div></div><div class='para' id='eng.sub-8'><div class='marginalizedparent'><a class='marginalized' href='#eng.sub-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3120'>#</a></div><div class='texpara'><div id='eng.sub-8.sentence-1' class='sentence'><i >Complexity</i>: Exactly <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></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.225em; padding-bottom: 0.225em;">r</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span> invocations
 of <span class='texttt'>e</span><a class='hidden_link' href='#eng.sub-8.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:subtract_with_carry_engine,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:subtract_with_carry_engine,constructor_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>explicit</span> subtract_with_carry_engine<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='eng.sub-9'><div class='marginalizedparent'><a class='marginalized' href='#eng.sub-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3132'>#</a></div><div class='texpara'><div id='eng.sub-9.sentence-1' class='sentence'><i >Effects</i>: With
 <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-mrow MJXc-space3"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">⌈</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</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;">32</span></span></span><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 class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span>
 and <span class='math'><span class='mathalpha'>a</span></span> an array (or equivalent)
 of length <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span>,
 invokes <span class='texttt'>q<span class='operator'>.</span>generate<span class='parenthesis'>(</span><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span>, <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span><span class='parenthesis'>)</span></span>
 and then, iteratively for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</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-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span>,
 sets <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span>
 to <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">(</span></span><span class="mjx-mrow"><span class="mjx-munderover"><span class="mjx-base"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">∑</span></span></span><span class="mjx-stack" style="vertical-align: -0.31em;"><span class="mjx-sup" style="font-size: 70.7%; padding-bottom: 0.351em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span><span class="mjx-sub" style="font-size: 70.7%; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.275em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><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-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;">32</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">)</span></span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span></span></span></span></span><a class='hidden_link' href='#eng.sub-9.sentence-1'>.</a></div> <div id='eng.sub-9.sentence-2' class='sentence'>If <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span></span></span></span></span> is then <span class='math'>0</span>,
 sets <span class='math'><span class='mathalpha'>c</span></span> to <span class='math'>1</span>;
 otherwise sets <span class='math'><span class='mathalpha'>c</span></span> to <span class='math'>0</span><a class='hidden_link' href='#eng.sub-9.sentence-2'>.</a></div></div></div></div></div><div id='eng.philox' class='section'><h4 ><a class='secnum' href='#eng.philox' style='min-width:95pt'>29.5.4.5</a> Class template <span class='texttt'>philox_<span class='shy'></span>engine</span> <a class='abbr_ref' href='rand.eng.philox'>[rand.eng.philox]</a></h4><div class='texpara'><a class='index' id='lib:philox_engine'></a></div><div class='para' id='eng.philox-1'><div class='marginalizedparent'><a class='marginalized' href='#eng.philox-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3153'>#</a></div><div class='texpara'><div id='eng.philox-1.sentence-1' class='sentence'>A <span class='texttt'>philox_<span class='shy'></span>engine</span> random number engine produces
unsigned integer random numbers in the interval [<span class='texttt'><span class='literal'>0</span>, <span class='math'><span class='mathalpha'>m</span></span></span>),
where <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</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-msubsup MJXc-space3"><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span></span></span></span></span> and
the template parameter <span class='math'><span class='mathalpha'>w</span></span> defines the range of the produced numbers<a class='hidden_link' href='#eng.philox-1.sentence-1'>.</a></div> <div id='eng.philox-1.sentence-2' class='sentence'>The state of a <span class='texttt'>philox_<span class='shy'></span>engine</span> object consists of
a sequence <span class='math'><span class='mathalpha'>X</span></span> of <span class='math'><span class='mathalpha'>n</span></span> unsigned integer values of width <span class='math'><span class='mathalpha'>w</span></span>,
a sequence <span class='math'><span class='mathalpha'>K</span></span> of <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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> values of <span class='texttt'>result_<span class='shy'></span>type</span>,
a sequence <span class='math'><span class='mathalpha'>Y</span></span> of <span class='math'><span class='mathalpha'>n</span></span> values of <span class='texttt'>result_<span class='shy'></span>type</span>, and
a scalar <span class='math'><span class='mathalpha'>i</span></span>, where
<ul class='itemize'><li id='eng.philox-1.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.philox-1.1'>(1.1)</a></div><span class='math'><span class='mathalpha'>X</span></span> is the interpretation of the unsigned integer <a class='hidden_link' href='#def:counter' id='def:counter'><i>counter</i></a> value
<span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.04em;">Z</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.372em;">:</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-munderover MJXc-space3"><span class="mjx-base"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">∑</span></span></span><span class="mjx-stack" style="vertical-align: -0.31em;"><span class="mjx-sup" style="font-size: 70.7%; padding-bottom: 0.351em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span><span class="mjx-sub" style="font-size: 70.7%; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><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-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span></span></span></span></span></span></span> of <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span></span></span> bits,</li><li id='eng.philox-1.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.philox-1.2'>(1.2)</a></div><span class='math'><span class='mathalpha'>K</span></span> are keys, which are generated once from the seed (see constructors below)
and remain constant unless the <span class='texttt'>seed</span> function (<a href='#req.eng' title='29.5.3.4&emsp;Random number engine requirements'>[rand.<span class='shy'></span>req.<span class='shy'></span>eng]</a>) is invoked,</li><li id='eng.philox-1.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.philox-1.3'>(1.3)</a></div><span class='math'><span class='mathalpha'>Y</span></span> stores a batch of output values, and</li><li id='eng.philox-1.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.philox-1.4'>(1.4)</a></div><span class='math'><span class='mathalpha'>i</span></span> is an index for an element of the sequence <span class='math'><span class='mathalpha'>Y</span></span><a class='hidden_link' href='#eng.philox-1.sentence-2'>.</a></li></ul></div></div></div><div class='para' id='eng.philox-2'><div class='marginalizedparent'><a class='marginalized' href='#eng.philox-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3176'>#</a></div><div class='texpara'><div id='eng.philox-2.sentence-1' class='sentence'>The generation algorithm returns <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.182em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.182em;">Y</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span>,
the value stored in the <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</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-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">th</span></span></span></span></span></span></span></span> element of <span class='math'><span class='mathalpha'>Y</span></span> after applying
the transition algorithm<a class='hidden_link' href='#eng.philox-2.sentence-1'>.</a></div></div></div><div class='para' id='eng.philox-3'><div class='marginalizedparent'><a class='marginalized' href='#eng.philox-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3181'>#</a></div><div class='texpara'><div id='eng.philox-3.sentence-1' class='sentence'>The state transition is performed as if by the following algorithm:
<span class='codeblock'><span class='math'><span class='mathalpha'>i</span></span> <span class='operator'>=</span> <span class='math'><span class='mathalpha'>i</span></span> <span class='operator'>+</span> <span class='literal'>1</span>
<span class='keyword'>if</span> <span class='parenthesis'>(</span><span class='math'><span class='mathalpha'>i</span></span> <span class='operator'>=</span><span class='operator'>=</span> <span class='math'><span class='mathalpha'>n</span></span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
  <span class='math'><span class='mathalpha'>Y</span></span> <span class='operator'>=</span> Philox<span class='parenthesis'>(</span><span class='math'><span class='mathalpha'>K</span></span>, <span class='math'><span class='mathalpha'>X</span></span><span class='parenthesis'>)</span> <span class='comment'>// <i ><span class='texttt'>see below</span></i></span>
  <span class='math'><span class='mathalpha'>Z</span></span> <span class='operator'>=</span> <span class='math'><span class='mathalpha'>Z</span></span> <span class='operator'>+</span> <span class='literal'>1</span>
  <span class='math'><span class='mathalpha'>i</span></span> <span class='operator'>=</span> <span class='literal'>0</span>
<span class='curlybracket'>}</span>
</span></div></div></div><div class='para' id='eng.philox-4'><div class='marginalizedparent'><a class='marginalized' href='#eng.philox-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3192'>#</a></div><div class='texpara'><div id='eng.philox-4.sentence-1' class='sentence'>The <span class='texttt'>Philox</span> function maps the length-<span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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> sequence <span class='math'><span class='mathalpha'>K</span></span> and
the length-<span class='math'><span class='mathalpha'>n</span></span> sequence <span class='math'><span class='mathalpha'>X</span></span> into a length-<span class='math'><span class='mathalpha'>n</span></span> output sequence <span class='math'><span class='mathalpha'>Y</span></span><a class='hidden_link' href='#eng.philox-4.sentence-1'>.</a></div> <div id='eng.philox-4.sentence-2' class='sentence'>Philox applies an <span class='math'><span class='mathalpha'>r</span></span>-round substitution-permutation network to the values in <span class='math'><span class='mathalpha'>X</span></span><a class='hidden_link' href='#eng.philox-4.sentence-2'>.</a></div> <div id='eng.philox-4.sentence-3' class='sentence'>A single round of the generation algorithm performs the following steps:
<ul class='itemize'><li id='eng.philox-4.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.philox-4.1'>(4.1)</a></div>The output sequence <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.513em; padding-left: 0.115em; padding-right: 0.071em;"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.298em;">′</span></span></span></span></span></span></span></span> of the previous round
(<span class='math'><span class='mathalpha'>X</span></span> in case of the first round)
is permuted to obtain the intermediate state <span class='math'><span class='mathalpha'>V</span></span>:
<span class='codeblock'><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.186em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.186em;">V</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</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-msubsup MJXc-space3"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-stack" style="vertical-align: -0.374em;"><span class="mjx-sup" style="font-size: 70.7%; padding-bottom: 0.255em; padding-left: 0.115em; padding-right: 0.071em;"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.298em;">′</span></span></span><span class="mjx-sub" style="font-size: 70.7%; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.06em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.519em; padding-right: 0.06em;">f</span></span></span><span class="mjx-sub" style="font-size: 83.3%; vertical-align: -0.18em; padding-right: 0.06em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span><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></span></span></span></span></span></span>
</span>
where <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span> and
<span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.06em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.519em; padding-right: 0.06em;">f</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span><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></span> is defined in Table <a href='#tab:rand.eng.philox.f' title='Table 127: Values for the word permutation <b>f</b>�'>127</a>. <div class='texpara'><div class='numberedTable' id='tab:rand.eng.philox.f'>Table <a href='#tab:rand.eng.philox.f'>127</a> &mdash; Values for the word permutation <span class='math'><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-main-B" style="padding-top: 0.372em; padding-bottom: 0.372em;">f</span></span></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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-main-B" style="padding-top: 0.151em; padding-bottom: 0.372em;">n</span></span></span></span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-B" style="padding-top: 0.446em; padding-bottom: 0.593em;">(j)</span></span></span></span></span></span></span></span>&emsp;<a href='./tab:rand.eng.philox.f'>[tab:rand.eng.philox.f]</a><br><table ><tr id='tab:rand.eng.philox.f-row-1' class='rowsep'><td colspan='2' class='center'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.eng.philox.f-row-1'>🔗</a></div><div class='texpara'><span class='math'><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-main-B" style="padding-top: 0.372em; padding-bottom: 0.372em;">f</span></span></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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-main-B" style="padding-top: 0.151em; padding-bottom: 0.372em;">n</span></span></span></span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-B" style="padding-top: 0.446em; padding-bottom: 0.593em;">(j)</span></span></span></span></span></span></span></span></div></td><td colspan='4' class='border center'><div class='texpara'><span class='math'><b>j</b></span></div></td></tr><tr id='tab:rand.eng.philox.f-row-2'><td colspan='2' class='center'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.eng.philox.f-row-2'>🔗</a></div></td><td class='border left cline'><div class='texpara'><div id='tab:rand.eng.philox.f-row-2-column-3-sentence-1' class='sentence'>0</div></div></td><td class='border left cline'><div class='texpara'><div id='tab:rand.eng.philox.f-row-2-column-4-sentence-1' class='sentence'>1</div></div></td><td class='border left cline'><div class='texpara'><div id='tab:rand.eng.philox.f-row-2-column-5-sentence-1' class='sentence'>2</div></div></td><td class='border left cline'><div class='texpara'><div id='tab:rand.eng.philox.f-row-2-column-6-sentence-1' class='sentence'>3</div></div></td></tr><tr id='tab:rand.eng.philox.f-row-3' class='rowsep'><td class='left'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.eng.philox.f-row-3'>🔗</a></div><div class='texpara'><span class='math'><b>n</b></span></div></td><td class='border left'><div class='texpara'><div id='tab:rand.eng.philox.f-row-3-column-2-sentence-1' class='sentence'>2</div></div></td><td class='border left'><div class='texpara'><div id='tab:rand.eng.philox.f-row-3-column-3-sentence-1' class='sentence'>0</div></div></td><td class='border left'><div class='texpara'><div id='tab:rand.eng.philox.f-row-3-column-4-sentence-1' class='sentence'>1</div></div></td><td colspan='2' class='empty border center'></td></tr><tr id='tab:rand.eng.philox.f-row-4'><td class='left'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.eng.philox.f-row-4'>🔗</a></div><div class='texpara'></div></td><td class='border left cline'><div class='texpara'><div id='tab:rand.eng.philox.f-row-4-column-2-sentence-1' class='sentence'>4</div></div></td><td class='border left cline'><div class='texpara'><div id='tab:rand.eng.philox.f-row-4-column-3-sentence-1' class='sentence'>2</div></div></td><td class='border left cline'><div class='texpara'><div id='tab:rand.eng.philox.f-row-4-column-4-sentence-1' class='sentence'>1</div></div></td><td class='border left cline'><div class='texpara'><div id='tab:rand.eng.philox.f-row-4-column-5-sentence-1' class='sentence'>0</div></div></td><td class='border left cline'><div class='texpara'><div id='tab:rand.eng.philox.f-row-4-column-6-sentence-1' class='sentence'>3</div></div></td></tr><tr id='tab:rand.eng.philox.f-row-5'><td class='left'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:rand.eng.philox.f-row-5'>🔗</a></div><div class='texpara'></div></td></tr></table></div>
 </div><div class='texpara'><div id='eng.philox-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#eng.philox-note-1'>1</a></i>:&ensp;<div id='eng.philox-4.1.sentence-2' class='sentence'>For <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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></span> the sequence is not permuted<a class='hidden_link' href='#eng.philox-4.1.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></li><li id='eng.philox-4.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.philox-4.2'>(4.2)</a></div>The following computations are applied to the elements of the <span class='math'><span class='mathalpha'>V</span></span> sequence:
<span class='codeblock'><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; 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;">2</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mulhi</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.186em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.186em;">V</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; 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;">2</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.081em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">e</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">y</span></span></span></span></span><span class="mjx-stack" style="vertical-align: -0.335em;"><span class="mjx-sup" style="font-size: 70.7%; padding-bottom: 0.255em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em; padding-right: 0.014em;">q</span></span></span><span class="mjx-sub" style="font-size: 70.7%; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base" style="margin-right: -0.186em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.186em;">V</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; 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;">2</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span></span></span></span></span>
<span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; 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;">2</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mullo</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.186em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.186em;">V</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; 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;">2</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.081em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span><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></span>
</span>
where:
  <ul class='itemize'><li id='eng.philox-4.2.1'><div class='marginalizedparent' style='left:-36mm'><a class='marginalized' href='#eng.philox-4.2.1'>(4.2.1)</a></div><span class='math'><span class='operatorname'>mullo</span>(<span class='texttt'>a</span>, <span class='texttt'>b</span>, <span class='texttt'>w</span>)</span> is
  the low half of the modular multiplication of <span class='texttt'>a</span> and <span class='texttt'>b</span>:
  <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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.225em; padding-bottom: 0.298em;">a</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></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;">b</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-TeXmathchoice"><span class="mjx-mspace" style="width: 0.667em; height: 0px;"></span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-msubsup MJXc-space1"><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span></span></span></span></span>,</li><li id='eng.philox-4.2.2'><div class='marginalizedparent' style='left:-36mm'><a class='marginalized' href='#eng.philox-4.2.2'>(4.2.2)</a></div><span class='math'><span class='operatorname'>mulhi</span>(<span class='texttt'>a</span>, <span class='texttt'>b</span>, <span class='texttt'>w</span>)</span> is
  the high half of the modular multiplication of <span class='texttt'>a</span> and <span class='texttt'>b</span>:
  <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><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 class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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.225em; padding-bottom: 0.298em;">a</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></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;">b</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span></span><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 class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><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></span>,</li><li id='eng.philox-4.2.3'><div class='marginalizedparent' style='left:-36mm'><a class='marginalized' href='#eng.philox-4.2.3'>(4.2.3)</a></div><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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 class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span> is the index in the sequences,</li><li id='eng.philox-4.2.4'><div class='marginalizedparent' style='left:-36mm'><a class='marginalized' href='#eng.philox-4.2.4'>(4.2.4)</a></div><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em; padding-right: 0.014em;">q</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span> is the index of the round,</li><li id='eng.philox-4.2.5'><div class='marginalizedparent' style='left:-36mm'><a class='marginalized' href='#eng.philox-4.2.5'>(4.2.5)</a></div><span class='math'><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-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">e</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">y</span></span></span></span></span><span class="mjx-stack" style="vertical-align: -0.335em;"><span class="mjx-sup" style="font-size: 70.7%; padding-bottom: 0.255em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em; padding-right: 0.014em;">q</span></span></span><span class="mjx-sub" style="font-size: 70.7%; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span></span> is the <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">th</span></span></span></span></span></span></span></span> round key for round <span class='math'><span class='mathalpha'>q</span></span>,
  <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">e</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">y</span></span></span></span></span><span class="mjx-stack" style="vertical-align: -0.335em;"><span class="mjx-sup" style="font-size: 70.7%; padding-bottom: 0.255em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em; padding-right: 0.014em;">q</span></span></span><span class="mjx-sub" style="font-size: 70.7%; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.372em;">:</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.04em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.04em;">K</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em; padding-right: 0.014em;">q</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.045em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.045em;">C</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-TeXmathchoice"><span class="mjx-mspace" style="width: 0.667em; height: 0px;"></span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-msubsup MJXc-space1"><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span></span></span></span></span>,</li><li id='eng.philox-4.2.6'><div class='marginalizedparent' style='left:-36mm'><a class='marginalized' href='#eng.philox-4.2.6'>(4.2.6)</a></div><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.04em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.04em;">K</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span> are the elements of the key sequence <span class='math'><span class='mathalpha'>K</span></span>,</li><li id='eng.philox-4.2.7'><div class='marginalizedparent' style='left:-36mm'><a class='marginalized' href='#eng.philox-4.2.7'>(4.2.7)</a></div><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.081em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span> is <span class='texttt'>multipliers<span class='squarebracket'>[</span><span class='math'><span class='mathalpha'>k</span></span><span class='squarebracket'>]</span></span>, and</li><li id='eng.philox-4.2.8'><div class='marginalizedparent' style='left:-36mm'><a class='marginalized' href='#eng.philox-4.2.8'>(4.2.8)</a></div><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.045em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.045em;">C</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span> is <span class='texttt'>round_<span class='shy'></span>consts<span class='squarebracket'>[</span><span class='math'><span class='mathalpha'>k</span></span><span class='squarebracket'>]</span></span>.</li></ul></li></ul></div></div></div><div class='para' id='eng.philox-5'><div class='marginalizedparent'><a class='marginalized' href='#eng.philox-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3260'>#</a></div><div class='texpara'><div id='eng.philox-5.sentence-1' class='sentence'>After <span class='math'><span class='mathalpha'>r</span></span> applications of the single-round function,
<span class='texttt'>Philox</span> returns the sequence <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.182em;">Y</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-msup MJXc-space3"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.513em; padding-left: 0.115em; padding-right: 0.071em;"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.298em;">′</span></span></span></span></span></span></span></span><a class='hidden_link' href='#eng.philox-5.sentence-1'>.</a></div></div><div class='texpara'><span id='lib:philox_engine,result_type'><span id='lib:result_type,philox_engine'><span id='lib:philox_engine_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:philox_engine_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UIntType, size_t w, size_t n, size_t r, UIntType<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> consts<span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> philox_engine <span class='curlybracket'>{</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t <i >array-size</i> <span class='operator'>=</span> n <span class='operator'>/</span> <span class='literal'>2</span>;   <span class='comment'>// <i >exposition only</i></span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> UIntType;

    <span class='comment'>// engine characteristics</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t word_size <span class='operator'>=</span> w;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t word_count <span class='operator'>=</span> n;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t round_count <span class='operator'>=</span> r;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> array<span class='anglebracket'>&lt;</span>result_type, <i >array-size</i><span class='anglebracket'>&gt;</span> multipliers;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> array<span class='anglebracket'>&lt;</span>result_type, <i >array-size&gt;</i> round_consts;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> <span class='literal'>0</span>; <span class='curlybracket'>}</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> m <span class='operator'>-</span> <span class='literal'>1</span>; <span class='curlybracket'>}</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type default_seed <span class='operator'>=</span> <span class='literal'>20111115u</span>;

    <span class='comment'>// constructors and seeding functions</span>
    <span class="added">constexpr </span>philox_engine<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> philox_engine<span class='parenthesis'>(</span>default_seed<span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> philox_engine<span class='parenthesis'>(</span>result_type value<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>explicit</span> philox_engine<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span>result_type value <span class='operator'>=</span> default_seed<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;

    <span class="added">constexpr </span><span class='keyword'>void</span> set_counter<span class='parenthesis'>(</span><span class='keyword'>const</span> array<span class='anglebracket'>&lt;</span>result_type, n<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> counter<span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> philox_engine<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> philox_engine<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> discard<span class='parenthesis'>(</span><span class='keyword'>unsigned</span> <span class='keyword'>long</span> <span class='keyword'>long</span> z<span class='parenthesis'>)</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> philox_engine<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, philox_engine<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='para' id='eng.philox-6'><div class='marginalizedparent'><a class='marginalized' href='#eng.philox-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3312'>#</a></div><div class='texpara'><div id='eng.philox-6.sentence-1' class='sentence'><i >Mandates</i>: <ul class='itemize'><li id='eng.philox-6.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.philox-6.1'>(6.1)</a></div><span class='texttt'><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>consts<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> n</span> is <span class='texttt'><span class='literal'>true</span></span>, and</li><li id='eng.philox-6.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.philox-6.2'>(6.2)</a></div><span class='texttt'>n <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>2</span> <span class='operator'>|</span><span class='operator'>|</span> n <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>4</span></span> is <span class='texttt'><span class='literal'>true</span></span>, and</li><li id='eng.philox-6.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.philox-6.3'>(6.3)</a></div><span class='texttt'><span class='literal'>0</span> <span class='anglebracket'>&lt;</span> r</span> is <span class='texttt'><span class='literal'>true</span></span>, and</li><li id='eng.philox-6.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#eng.philox-6.4'>(6.4)</a></div><span class='texttt'><span class='literal'>0</span> <span class='anglebracket'>&lt;</span> w <span class='operator'>&amp;</span><span class='operator'>&amp;</span> w <span class='anglebracket'>&lt;</span><span class='operator'>=</span> numeric_<span class='shy'></span>limits<span class='anglebracket'>&lt;</span>UIntType<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>digits</span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#eng.philox-6.sentence-1'>.</a></li></ul></div></div></div><div class='para' id='eng.philox-7'><div class='marginalizedparent'><a class='marginalized' href='#eng.philox-7'>7</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3321'>#</a></div><div class='texpara'><div id='eng.philox-7.sentence-1' class='sentence'>The template parameter pack <span class='texttt'>consts</span> represents
the <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.081em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span> and <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.045em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.045em;">C</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span> constants which are grouped as follows:
<span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">[</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.081em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.045em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.045em;">C</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.081em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.045em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.045em;">C</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.081em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">2</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.045em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.045em;">C</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">2</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.081em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.275em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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 class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.045em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.045em;">C</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.275em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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 class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span><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></span><a class='hidden_link' href='#eng.philox-7.sentence-1'>.</a></div></div></div><div class='para' id='eng.philox-8'><div class='marginalizedparent'><a class='marginalized' href='#eng.philox-8'>8</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3326'>#</a></div><div class='texpara'><div id='eng.philox-8.sentence-1' class='sentence'>The textual representation consists of the values of
<span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.04em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.04em;">K</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.04em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.04em;">K</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.275em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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 class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span>, in that order<a class='hidden_link' href='#eng.philox-8.sentence-1'>.</a></div> <div id='eng.philox-note-2' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#eng.philox-note-2'>2</a></i>:&ensp;<div id='eng.philox-8.sentence-2' class='sentence'>The stream extraction operator can reconstruct <span class='math'><span class='mathalpha'>Y</span></span> from <span class='math'><span class='mathalpha'>K</span></span> and <span class='math'><span class='mathalpha'>X</span></span>, as needed<a class='hidden_link' href='#eng.philox-8.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='texpara'><div id='lib:philox_engine,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:philox_engine,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> philox_engine<span class='parenthesis'>(</span>result_type value<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='eng.philox-9'><div class='marginalizedparent'><a class='marginalized' href='#eng.philox-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3339'>#</a></div><div class='texpara'><div id='eng.philox-9.sentence-1' class='sentence'><i >Effects</i>: Sets the <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.04em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.04em;">K</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span></span></span></span></span> element of sequence <span class='math'><span class='mathalpha'>K</span></span> to <span class='math'><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;">value</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-TeXmathchoice"><span class="mjx-mspace" style="width: 0.667em; height: 0px;"></span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-msubsup MJXc-space1"><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span></span></span></span></span><a class='hidden_link' href='#eng.philox-9.sentence-1'>.</a></div> <div id='eng.philox-9.sentence-2' class='sentence'>All elements of sequences <span class='math'><span class='mathalpha'>X</span></span> and <span class='math'><span class='mathalpha'>K</span></span> (except <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.04em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.04em;">K</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span></span></span></span></span>) are set to <span class='texttt'><span class='literal'>0</span></span><a class='hidden_link' href='#eng.philox-9.sentence-2'>.</a></div> <div id='eng.philox-9.sentence-3' class='sentence'>The value of <span class='math'><span class='mathalpha'>i</span></span> is set to <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span><a class='hidden_link' href='#eng.philox-9.sentence-3'>.</a></div></div></div></div><div class='texpara'><div id='lib:philox_engine,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:philox_engine,constructor_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>explicit</span> philox_engine<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='eng.philox-10'><div class='marginalizedparent'><a class='marginalized' href='#eng.philox-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3352'>#</a></div><div class='texpara'><div id='eng.philox-10.sentence-1' class='sentence'><i >Effects</i>: With <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</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-mrow MJXc-space3"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">⌈</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</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;">32</span></span></span><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 class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span> and
an array (or equivalent) <span class='texttt'>a</span> of length <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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 class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span></span></span></span></span>,
invokes <span class='texttt'>q<span class='operator'>.</span>generate<span class='parenthesis'>(</span>a <span class='operator'>+</span> <span class='literal'>0</span>, a <span class='operator'>+</span> n <span class='operator'>/</span> <span class='literal'>2</span> <span class='operator'>*</span> <span class='math'><span class='mathalpha'>p</span></span><span class='parenthesis'>)</span></span> and
then iteratively for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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 class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span>,
sets <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.04em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.04em;">K</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span> to
<span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">(</span></span><span class="mjx-mrow"><span class="mjx-munderover"><span class="mjx-base"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">∑</span></span></span><span class="mjx-stack" style="vertical-align: -0.315em;"><span class="mjx-sup" style="font-size: 70.7%; padding-bottom: 0.255em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span><span class="mjx-sub" style="font-size: 70.7%; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><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-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;">32</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">)</span></span></span><span class="mjx-TeXmathchoice"><span class="mjx-mspace" style="width: 0.667em; height: 0px;"></span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-msubsup MJXc-space1"><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span></span></span></span></span><a class='hidden_link' href='#eng.philox-10.sentence-1'>.</a></div> <div id='eng.philox-10.sentence-2' class='sentence'>All elements of sequence <span class='math'><span class='mathalpha'>X</span></span> are set to <span class='texttt'><span class='literal'>0</span></span><a class='hidden_link' href='#eng.philox-10.sentence-2'>.</a></div> <div id='eng.philox-10.sentence-3' class='sentence'>The value of <span class='math'><span class='mathalpha'>i</span></span> is set to <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span><a class='hidden_link' href='#eng.philox-10.sentence-3'>.</a></div></div></div></div><div class='texpara'><div id='lib:philox_engine,set_counter'><div id='lib:set_counter,philox_engine'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:set_counter,philox_engine'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>void</span> set_counter<span class='parenthesis'>(</span><span class='keyword'>const</span> array<span class='anglebracket'>&lt;</span>result_type, n<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='eng.philox-11'><div class='marginalizedparent'><a class='marginalized' href='#eng.philox-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3370'>#</a></div><div class='texpara'><div id='eng.philox-11.sentence-1' class='sentence'><i >Effects</i>: For <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span> sets <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.024em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.024em;">X</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span></span></span></span></span> to <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.045em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.045em;">C</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span></span></span><span class="mjx-TeXmathchoice"><span class="mjx-mspace" style="width: 0.667em; height: 0px;"></span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-msubsup MJXc-space1"><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span></span></span></span></span><a class='hidden_link' href='#eng.philox-11.sentence-1'>.</a></div> <div id='eng.philox-11.sentence-2' class='sentence'>The value of <span class='math'><span class='mathalpha'>i</span></span> is set to <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span><a class='hidden_link' href='#eng.philox-11.sentence-2'>.</a></div> <div id='eng.philox-note-3' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#eng.philox-note-3'>3</a></i>:&ensp;<div id='eng.philox-11.sentence-3' class='sentence'>The counter is the value <span class='math'><span class='mathalpha'>Z</span></span> introduced at the beginning of this subclause<a class='hidden_link' href='#eng.philox-11.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div></div></div><div id='adapt' class='section'><h3 ><a class='secnum' href='#adapt' style='min-width:80pt'>29.5.5</a> Random number engine adaptor class templates <a class='abbr_ref' href='rand.adapt'>[rand.adapt]</a></h3><div id='adapt.general' class='section'><h4 ><a class='secnum' href='#adapt.general' style='min-width:95pt'>29.5.5.1</a> General <a class='abbr_ref' href='rand.adapt.general'>[rand.adapt.general]</a></h4><div class='para' id='adapt.general-1'><div class='marginalizedparent'><a class='marginalized' href='#adapt.general-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3392'>#</a></div><div class='texpara'><div id='adapt.general-1.sentence-1' class='sentence'>Each type instantiated
from a class template specified in <a href='#adapt' title='29.5.5&emsp;Random number engine adaptor class templates'>[rand.<span class='shy'></span>adapt]</a>
meets the requirements
of a <a href='#req.adapt' title='29.5.3.5&emsp;Random number engine adaptor requirements&emsp;[rand.req.adapt]'>random number engine adaptor</a> type<a class='hidden_link' href='#adapt.general-1.sentence-1'>.</a></div></div></div><div class='para' id='adapt.general-2'><div class='marginalizedparent'><a class='marginalized' href='#adapt.general-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3398'>#</a></div><div class='texpara'><div id='adapt.general-2.sentence-1' class='sentence'>Except where specified otherwise,
the complexity of each function
specified in <a href='#adapt' title='29.5.5&emsp;Random number engine adaptor class templates'>[rand.<span class='shy'></span>adapt]</a>
is constant<a class='hidden_link' href='#adapt.general-2.sentence-1'>.</a></div></div></div><div class='para' id='adapt.general-3'><div class='marginalizedparent'><a class='marginalized' href='#adapt.general-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3404'>#</a></div><div class='texpara'><div id='adapt.general-3.sentence-1' class='sentence'>Except where specified otherwise,
no function described in <a href='#adapt' title='29.5.5&emsp;Random number engine adaptor class templates'>[rand.<span class='shy'></span>adapt]</a>
throws an exception<a class='hidden_link' href='#adapt.general-3.sentence-1'>.</a></div></div></div><div class='para' id='adapt.general-4'><div class='marginalizedparent'><a class='marginalized' href='#adapt.general-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3409'>#</a></div><div class='texpara'><div id='adapt.general-4.sentence-1' class='sentence'>Every function described in <a href='#adapt' title='29.5.5&emsp;Random number engine adaptor class templates'>[rand.<span class='shy'></span>adapt]</a>
that has a function parameter <span class='texttt'>q</span> of type <span class='texttt'>Sseq<span class='operator'>&amp;</span></span>
for a template type parameter named <span class='texttt'>Sseq</span>
that is different from type <span class='texttt'>seed_<span class='shy'></span>seq</span>
throws what and when the invocation of <span class='texttt'>q<span class='operator'>.</span>generate</span> throws<a class='hidden_link' href='#adapt.general-4.sentence-1'>.</a></div></div></div><div class='para' id='adapt.general-5'><div class='marginalizedparent'><a class='marginalized' href='#adapt.general-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3416'>#</a></div><div class='texpara'><div id='adapt.general-5.sentence-1' class='sentence'>Descriptions are provided in <a href='#adapt' title='29.5.5&emsp;Random number engine adaptor class templates'>[rand.<span class='shy'></span>adapt]</a>
only for adaptor operations
that are not described in subclause <a href='#req.adapt' title='29.5.3.5&emsp;Random number engine adaptor requirements'>[rand.<span class='shy'></span>req.<span class='shy'></span>adapt]</a>
or for operations where there is additional semantic information<a class='hidden_link' href='#adapt.general-5.sentence-1'>.</a></div> <div id='adapt.general-5.sentence-2' class='sentence'>In particular,
declarations for copy constructors,
for copy assignment operators,
for streaming operators,
and for equality and inequality operators
are not shown in the synopses<a class='hidden_link' href='#adapt.general-5.sentence-2'>.</a></div></div></div><div class='para' id='adapt.general-6'><div class='marginalizedparent'><a class='marginalized' href='#adapt.general-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3428'>#</a></div><div class='texpara'><div id='adapt.general-6.sentence-1' class='sentence'>Each template specified in <a href='#adapt' title='29.5.5&emsp;Random number engine adaptor class templates'>[rand.<span class='shy'></span>adapt]</a>
requires one or more relationships,
involving the value(s) of its constant template parameter(s), to hold<a class='hidden_link' href='#adapt.general-6.sentence-1'>.</a></div> <div id='adapt.general-6.sentence-2' class='sentence'>A program instantiating any of these templates
is ill-formed
if any such required relationship fails to hold<a class='hidden_link' href='#adapt.general-6.sentence-2'>.</a></div></div></div></div><div id='adapt.disc' class='section'><h4 ><a class='secnum' href='#adapt.disc' style='min-width:95pt'>29.5.5.2</a> Class template <span class='texttt'>discard_<span class='shy'></span>block_<span class='shy'></span>engine</span> <a class='abbr_ref' href='rand.adapt.disc'>[rand.adapt.disc]</a></h4><div class='texpara'><a class='index' id='lib:discard_block_engine'></a></div><div class='para' id='adapt.disc-1'><div class='marginalizedparent'><a class='marginalized' href='#adapt.disc-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3442'>#</a></div><div class='texpara'><div id='adapt.disc-1.sentence-1' class='sentence'>A <span class='texttt'>discard_<span class='shy'></span>block_<span class='shy'></span>engine</span> random number engine adaptor
produces random numbers
selected from those produced by some base engine <span class='math'><span class='mathalpha'>e</span></span><a class='hidden_link' href='#adapt.disc-1.sentence-1'>.</a></div> <div id='adapt.disc-1.sentence-2' class='sentence'>The state <span class='texttt'>x</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span>
of a <span class='texttt'>discard_<span class='shy'></span>block_<span class='shy'></span>engine</span> engine adaptor object <span class='texttt'>x</span>
consists of the state <span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span> of its base engine <span class='texttt'>e</span>
and an additional integer <span class='math'><span class='mathalpha'>n</span></span><a class='hidden_link' href='#adapt.disc-1.sentence-2'>.</a></div> <div id='adapt.disc-1.sentence-3' class='sentence'>The size of the state is
 the size of <span class='math'><span class='mathalpha'>e</span></span>'s state plus <span class='math'>1</span><a class='hidden_link' href='#adapt.disc-1.sentence-3'>.</a></div></div></div><div class='para' id='adapt.disc-2'><div class='marginalizedparent'><a class='marginalized' href='#adapt.disc-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3453'>#</a></div><div class='texpara'><div id='adapt.disc-2.sentence-1' class='sentence'>The transition algorithm
discards all but <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&gt;</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;">0</span></span></span></span></span></span> values
from each block of <span class='math'><span class='mathalpha'>p</span> &ensp;≥&ensp;<span class='mathalpha'>r</span></span> values delivered by <span class='math'><span class='mathalpha'>e</span></span><a class='hidden_link' href='#adapt.disc-2.sentence-1'>.</a></div> <div id='adapt.disc-2.sentence-2' class='sentence'>The state transition is performed as follows:
If <span class='math'><span class='mathalpha'>n</span> &ensp;≥&ensp;<span class='mathalpha'>r</span></span>,
 advance the state of <span class='texttt'>e</span> from <span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span> to <span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span></span></span></span></span>
 and set <span class='math'><span class='mathalpha'>n</span></span> to <span class='math'>0</span><a class='hidden_link' href='#adapt.disc-2.sentence-2'>.</a></div> <div id='adapt.disc-2.sentence-3' class='sentence'>In any case,
 then increment <span class='math'><span class='mathalpha'>n</span></span>
 and advance <span class='texttt'>e</span>'s then-current state <span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span></span></span></span></span></span></span>
 to <span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span></span></span></span></span><a class='hidden_link' href='#adapt.disc-2.sentence-3'>.</a></div></div></div><div class='para' id='adapt.disc-3'><div class='marginalizedparent'><a class='marginalized' href='#adapt.disc-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3466'>#</a></div><div class='texpara'><div id='adapt.disc-3.sentence-1' class='sentence'>The generation algorithm
yields the value returned by the last invocation of <span class='texttt'>e<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
 while advancing <span class='texttt'>e</span>'s state as described above<a class='hidden_link' href='#adapt.disc-3.sentence-1'>.</a></div></div><div class='texpara'><span id='lib:discard_block_engine,result_type'><span id='lib:result_type,discard_block_engine'><span id='lib:discard_block_engine_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:discard_block_engine_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Engine, size_t p, size_t r<span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> discard_block_engine <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> <span class='keyword'>typename</span> Engine<span class='operator'>::</span>result_type;

    <span class='comment'>// engine characteristics</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t block_size <span class='operator'>=</span> p;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t used_block <span class='operator'>=</span> r;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> Engine<span class='operator'>::</span>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> Engine<span class='operator'>::</span>max<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class='comment'>// constructors and seeding functions</span>
    <span class="added">constexpr </span>discard_block_engine<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> discard_block_engine<span class='parenthesis'>(</span><span class='keyword'>const</span> Engine<span class='operator'>&amp;</span> e<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> discard_block_engine<span class='parenthesis'>(</span>Engine<span class='operator'>&amp;</span><span class='operator'>&amp;</span> e<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> discard_block_engine<span class='parenthesis'>(</span>result_type s<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>explicit</span> discard_block_engine<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span>result_type s<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> discard_block_engine<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> discard_block_engine<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> discard<span class='parenthesis'>(</span><span class='keyword'>unsigned</span> <span class='keyword'>long</span> <span class='keyword'>long</span> z<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span><span class='keyword'>const</span> Engine<span class='operator'>&amp;</span> base<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> e; <span class='curlybracket'>}</span>

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> discard_block_engine<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;    <span class='comment'>// hosted</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, discard_block_engine<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;          <span class='comment'>// hosted</span>

  <span class='keyword'>private</span><span class='operator'>:</span>
    Engine e;   <span class='comment'>// <i >exposition only</i></span>
    size_t n;   <span class='comment'>// <i >exposition only</i></span>
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='para' id='adapt.disc-4'><div class='marginalizedparent'><a class='marginalized' href='#adapt.disc-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3522'>#</a></div><div class='texpara'><div id='adapt.disc-4.sentence-1' class='sentence'>The following relations shall hold:
  <span class='texttt'><span class='literal'>0</span> <span class='anglebracket'>&lt;</span> r</span>
and
  <span class='texttt'>r <span class='anglebracket'>&lt;</span><span class='operator'>=</span> p</span><a class='hidden_link' href='#adapt.disc-4.sentence-1'>.</a></div></div></div><div class='para' id='adapt.disc-5'><div class='marginalizedparent'><a class='marginalized' href='#adapt.disc-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3528'>#</a></div><div class='texpara'><div id='adapt.disc-5.sentence-1' class='sentence'>The textual representation
consists of
 the textual representation of <span class='texttt'>e</span>
followed by
 the value of <span class='texttt'>n</span><a class='hidden_link' href='#adapt.disc-5.sentence-1'>.</a></div></div></div><div class='para' id='adapt.disc-6'><div class='marginalizedparent'><a class='marginalized' href='#adapt.disc-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3535'>#</a></div><div class='texpara'><div id='adapt.disc-6.sentence-1' class='sentence'>In addition to its behavior
pursuant to subclause <a href='#req.adapt' title='29.5.3.5&emsp;Random number engine adaptor requirements'>[rand.<span class='shy'></span>req.<span class='shy'></span>adapt]</a>,
each constructor<a class='index' id='lib:discard_block_engine,constructor'></a>
that is not a copy constructor
sets <span class='texttt'>n</span> to <span class='math'>0</span><a class='hidden_link' href='#adapt.disc-6.sentence-1'>.</a></div></div></div></div><div id='adapt.ibits' class='section'><h4 ><a class='secnum' href='#adapt.ibits' style='min-width:95pt'>29.5.5.3</a> Class template <span class='texttt'>independent_<span class='shy'></span>bits_<span class='shy'></span>engine</span> <a class='abbr_ref' href='rand.adapt.ibits'>[rand.adapt.ibits]</a></h4><div class='texpara'><a class='index' id='lib:independent_bits_engine'></a></div><div class='para' id='adapt.ibits-1'><div class='marginalizedparent'><a class='marginalized' href='#adapt.ibits-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3549'>#</a></div><div class='texpara'><div id='adapt.ibits-1.sentence-1' class='sentence'>An <span class='texttt'>independent_<span class='shy'></span>bits_<span class='shy'></span>engine</span>
random number engine adaptor
combines random numbers
that are produced by some base engine <span class='math'><span class='mathalpha'>e</span></span>,
so as to produce random numbers
with a specified number of bits <span class='math'><span class='mathalpha'>w</span></span><a class='hidden_link' href='#adapt.ibits-1.sentence-1'>.</a></div> <div id='adapt.ibits-1.sentence-2' class='sentence'>The state <span class='texttt'>x</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span>
of an <span class='texttt'>independent_<span class='shy'></span>bits_<span class='shy'></span>engine</span>
engine adaptor object <span class='texttt'>x</span>
consists of
 the state <span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span> of its base engine <span class='texttt'>e</span>;
the size of the state is
 the size of <span class='math'><span class='mathalpha'>e</span></span>'s state<a class='hidden_link' href='#adapt.ibits-1.sentence-2'>.</a></div></div></div><div class='para' id='adapt.ibits-2'><div class='marginalizedparent'><a class='marginalized' href='#adapt.ibits-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3564'>#</a></div><div class='texpara'><div id='adapt.ibits-2.sentence-1' class='sentence'>The transition and generation algorithms
are described in terms
of the following integral constants:<ul class='itemize'><li id='adapt.ibits-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#adapt.ibits-2.1'>(2.1)</a></div><div class='texpara'><div id='adapt.ibits-2.1.sentence-1' class='sentence'>Let
     <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">R</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-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char" style="padding-top: 0.519em; padding-bottom: 0.077em;"><span class="mjx-charbox MJXc-TeX-type-R" style="padding-bottom: 0.233em; margin-right: 0.275em;">e<span class='operator'>.</span>max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> </span><span class="mjx-charbox MJXc-TeX-type-R" style="padding-bottom: 0.233em; margin-right: 0.275em;"><span class='operator'>-</span> </span><span class="mjx-charbox MJXc-TeX-type-R" style="padding-bottom: 0.233em; margin-right: 0.275em;">e<span class='operator'>.</span>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> </span><span class="mjx-charbox MJXc-TeX-type-R" style="padding-bottom: 0.233em; margin-right: 0.275em;"><span class='operator'>+</span> </span><span class="mjx-charbox MJXc-TeX-type-R" style="padding-bottom: 0.233em;"><span class='literal'>1</span></span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span>
   and
     <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</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-mrow MJXc-space3"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">⌊</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">2</span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">R</span></span></span><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 class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#adapt.ibits-2.1.sentence-1'>.</a></div></div></li><li id='adapt.ibits-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#adapt.ibits-2.2'>(2.2)</a></div><div class='texpara'><div id='adapt.ibits-2.2.sentence-1' class='sentence'>With <span class='math'><span class='mathalpha'>n</span></span> as determined below,
   let
     <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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-mrow MJXc-space3"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">⌊</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span><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 class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span>,
     <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span>,
     <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.006em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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-msubsup MJXc-space3"><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-texatom"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 83.3%; vertical-align: -0.267em; padding-right: 0.06em;"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span></span></span><span class="mjx-mrow MJXc-space1"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">⌊</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">R</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-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-texatom"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 83.3%; vertical-align: -0.267em; padding-right: 0.06em;"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span></span></span></span><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 class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span>,
   and
     <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.006em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</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-msubsup MJXc-space3"><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-texatom"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 83.3%; vertical-align: -0.267em; padding-right: 0.06em;"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span><span class="mjx-mrow MJXc-space1"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">⌊</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">R</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-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-texatom"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 83.3%; vertical-align: -0.267em; padding-right: 0.06em;"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">⌋</span></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#adapt.ibits-2.2.sentence-1'>.</a></div></div></li><li id='adapt.ibits-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#adapt.ibits-2.3'>(2.3)</a></div><div class='texpara'><div id='adapt.ibits-2.3.sentence-1' class='sentence'>Let
     <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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-mrow MJXc-space3"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">⌈</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span></span><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 class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span>
   if and only if the relation
     <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">R</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base" style="margin-right: -0.006em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≤</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-mrow MJXc-space1"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">⌊</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.006em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span><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 class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span>
   holds as a result<a class='hidden_link' href='#adapt.ibits-2.3.sentence-1'>.</a></div> <div id='adapt.ibits-2.3.sentence-2' class='sentence'>Otherwise let
     <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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;">1</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mrow MJXc-space2"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">⌈</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span></span><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 class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#adapt.ibits-2.3.sentence-2'>.</a></div></div></li></ul></div> <div id='adapt.ibits-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#adapt.ibits-note-1'>1</a></i>:&ensp;<div id='adapt.ibits-2.sentence-2' class='sentence'>The relation
 <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</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-msubsup MJXc-space3"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span><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></span>
 always holds<a class='hidden_link' href='#adapt.ibits-2.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='adapt.ibits-3'><div class='marginalizedparent'><a class='marginalized' href='#adapt.ibits-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3597'>#</a></div><div class='texpara'><div id='adapt.ibits-3.sentence-1' class='sentence'>The transition algorithm
is carried out by invoking <span class='texttt'>e<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
as often as needed to obtain <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span></span></span></span></span>
values less than <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.006em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.519em; padding-bottom: 0.372em;">e<span class='operator'>.</span>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span>
and <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span></span></span></span></span> values less than <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.006em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.519em; padding-bottom: 0.372em;">e<span class='operator'>.</span>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#adapt.ibits-3.sentence-1'>.</a></div></div></div><div class='para' id='adapt.ibits-4'><div class='marginalizedparent'><a class='marginalized' href='#adapt.ibits-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3604'>#</a></div><div class='texpara'><div id='adapt.ibits-4.sentence-1' class='sentence'>The generation algorithm
uses the values produced
while advancing the state as described above
to yield a quantity <span class='math'><span class='mathalpha'>S</span></span>
obtained as if by the following algorithm:
<span class='codeblock'><span class='math'><span class='mathalpha'>S</span></span> <span class='operator'>=</span> <span class='literal'>0</span>;
<span class='keyword'>for</span> <span class='parenthesis'>(</span><span class='math'><span class='mathalpha'>k</span></span> <span class='operator'>=</span> <span class='math'>0</span>; <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">≠</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span></span></span></span></span>; <span class='math'><span class='mathalpha'>k</span></span> <span class='operator'>+</span><span class='operator'>=</span> <span class='math'>1</span><span class='parenthesis'>)</span>  <span class='curlybracket'>{</span>
 <span class='keyword'>do</span> <span class='math'><span class='mathalpha'>u</span></span> <span class='operator'>=</span> e<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>-</span> e<span class='operator'>.</span>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='keyword'>while</span> <span class='parenthesis'>(</span><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">u</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≥</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.006em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span></span></span></span></span><span class='parenthesis'>)</span>;
 <span class='math'><span class='mathalpha'>S</span></span> <span class='operator'>=</span> <span class='math'><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-texatom"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 83.3%; vertical-align: -0.267em; padding-right: 0.06em;"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">u</span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><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-texatom"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 83.3%; vertical-align: -0.267em; padding-right: 0.06em;"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span></span></span></span></span></span></span>;
<span class='curlybracket'>}</span>
<span class='keyword'>for</span> <span class='parenthesis'>(</span><span class='math'><span class='mathalpha'>k</span></span> <span class='operator'>=</span> <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span></span></span></span></span>; <span class='math'><span class='mathalpha'>k</span> &ensp;≠&ensp;<span class='mathalpha'>n</span></span>; <span class='math'><span class='mathalpha'>k</span></span> <span class='operator'>+</span><span class='operator'>=</span> <span class='math'>1</span><span class='parenthesis'>)</span>  <span class='curlybracket'>{</span>
 <span class='keyword'>do</span> <span class='math'><span class='mathalpha'>u</span></span> <span class='operator'>=</span> e<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>-</span> e<span class='operator'>.</span>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='keyword'>while</span> <span class='parenthesis'>(</span><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">u</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≥</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.006em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</span></span></span></span></span></span></span></span><span class='parenthesis'>)</span>;
 <span class='math'><span class='mathalpha'>S</span></span> <span class='operator'>=</span> <span class='math'><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-texatom"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 83.3%; vertical-align: -0.267em; padding-right: 0.06em;"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">u</span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><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-texatom"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 83.3%; vertical-align: -0.267em; padding-right: 0.06em;"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span></span></span></span></span>;
<span class='curlybracket'>}</span>
</span></div></div><div class='texpara'><span id='lib:independent_bits_engine,result_type'><span id='lib:result_type,independent_bits_engine'><span id='lib:independent_bits_engine_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:independent_bits_engine_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Engine, size_t w, <span class='keyword'>class</span> UIntType<span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> independent_bits_engine <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> UIntType;

    <span class='comment'>// engine characteristics</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> <span class='literal'>0</span>; <span class='curlybracket'>}</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span>; <span class='curlybracket'>}</span>

    <span class='comment'>// constructors and seeding functions</span>
    <span class="added">constexpr </span>independent_bits_engine<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> independent_bits_engine<span class='parenthesis'>(</span><span class='keyword'>const</span> Engine<span class='operator'>&amp;</span> e<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> independent_bits_engine<span class='parenthesis'>(</span>Engine<span class='operator'>&amp;</span><span class='operator'>&amp;</span> e<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> independent_bits_engine<span class='parenthesis'>(</span>result_type s<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>explicit</span> independent_bits_engine<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span>result_type s<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> independent_bits_engine<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> independent_bits_engine<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> discard<span class='parenthesis'>(</span><span class='keyword'>unsigned</span> <span class='keyword'>long</span> <span class='keyword'>long</span> z<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span><span class='keyword'>const</span> Engine<span class='operator'>&amp;</span> base<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> e; <span class='curlybracket'>}</span>

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> independent_bits_engine<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>; <span class='comment'>// hosted</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, independent_bits_engine<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;       <span class='comment'>// hosted</span>

  <span class='keyword'>private</span><span class='operator'>:</span>
    Engine e;   <span class='comment'>// <i >exposition only</i></span>
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='para' id='adapt.ibits-5'><div class='marginalizedparent'><a class='marginalized' href='#adapt.ibits-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3670'>#</a></div><div class='texpara'><div id='adapt.ibits-5.sentence-1' class='sentence'>The following relations shall hold:
  <span class='texttt'><span class='literal'>0</span> <span class='anglebracket'>&lt;</span> w</span>
and
  <span class='texttt'>w <span class='anglebracket'>&lt;</span><span class='operator'>=</span> numeric_<span class='shy'></span>limits<span class='anglebracket'>&lt;</span>result_<span class='shy'></span>type<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>digits</span><a class='hidden_link' href='#adapt.ibits-5.sentence-1'>.</a></div></div></div><div class='para' id='adapt.ibits-6'><div class='marginalizedparent'><a class='marginalized' href='#adapt.ibits-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3676'>#</a></div><div class='texpara'><div id='adapt.ibits-6.sentence-1' class='sentence'>The textual representation
consists of the textual representation of <span class='texttt'>e</span><a class='hidden_link' href='#adapt.ibits-6.sentence-1'>.</a></div></div></div></div><div id='adapt.shuf' class='section'><h4 ><a class='secnum' href='#adapt.shuf' style='min-width:95pt'>29.5.5.4</a> Class template <span class='texttt'>shuffle_<span class='shy'></span>order_<span class='shy'></span>engine</span> <a class='abbr_ref' href='rand.adapt.shuf'>[rand.adapt.shuf]</a></h4><div class='texpara'><a class='index' id='lib:shuffle_order_engine'></a></div><div class='para' id='adapt.shuf-1'><div class='marginalizedparent'><a class='marginalized' href='#adapt.shuf-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3687'>#</a></div><div class='texpara'><div id='adapt.shuf-1.sentence-1' class='sentence'>A <span class='texttt'>shuffle_<span class='shy'></span>order_<span class='shy'></span>engine</span> random number engine adaptor
produces the same random numbers
that are produced by some base engine <span class='math'><span class='mathalpha'>e</span></span>,
but delivers them in a different sequence<a class='hidden_link' href='#adapt.shuf-1.sentence-1'>.</a></div> <div id='adapt.shuf-1.sentence-2' class='sentence'>The state <span class='texttt'>x</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span>
of a <span class='texttt'>shuffle_<span class='shy'></span>order_<span class='shy'></span>engine</span> engine adaptor object <span class='texttt'>x</span>
consists of
 the state <span class='texttt'>e</span><span class='math'><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-mi"><span class="mjx-char"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span></span></span> of its base engine <span class='texttt'>e</span>,
 an additional value <span class='math'><span class='mathalpha'>Y</span></span> of the type delivered by <span class='texttt'>e</span>,
and
 an additional sequence <span class='math'><span class='mathalpha'>V</span></span> of <span class='math'><span class='mathalpha'>k</span></span> values
 also of the type delivered by <span class='texttt'>e</span><a class='hidden_link' href='#adapt.shuf-1.sentence-2'>.</a></div> <div id='adapt.shuf-1.sentence-3' class='sentence'>The size of the state is
 the size of <span class='math'><span class='mathalpha'>e</span></span>'s state plus <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span><a class='hidden_link' href='#adapt.shuf-1.sentence-3'>.</a></div></div></div><div class='para' id='adapt.shuf-2'><div class='marginalizedparent'><a class='marginalized' href='#adapt.shuf-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3703'>#</a></div><div class='texpara'><div id='adapt.shuf-2.sentence-1' class='sentence'>The transition algorithm
permutes the values produced by <span class='math'><span class='mathalpha'>e</span></span><a class='hidden_link' href='#adapt.shuf-2.sentence-1'>.</a></div> <div id='adapt.shuf-2.sentence-2' class='sentence'>The state transition is performed as follows:
<ul class='itemize'><li id='adapt.shuf-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#adapt.shuf-2.1'>(2.1)</a></div><div class='texpara'><div id='adapt.shuf-2.1.sentence-1' class='sentence'>Calculate an integer
   <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</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-mrow MJXc-space3"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">⌊</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mfrac"><span class="mjx-box MJXc-stacked" style="width: 4.589em; padding: 0px 0.12em;"><span class="mjx-numerator" style="font-size: 70.7%; width: 6.49em; top: -1.706em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.182em;">Y</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">e</span></span></span><span class="mjx-sub" style="font-size: 83.3%; vertical-align: -0.27em; padding-right: 0.06em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">min</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span><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-denominator" style="font-size: 70.7%; width: 6.49em; bottom: -0.886em;"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">e</span></span></span><span class="mjx-sub" style="font-size: 83.3%; vertical-align: -0.18em; padding-right: 0.06em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.372em;">max</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">e</span></span></span><span class="mjx-sub" style="font-size: 83.3%; vertical-align: -0.27em; padding-right: 0.06em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">min</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 4.589em;" class="mjx-line"></span></span><span style="height: 1.833em; vertical-align: -0.626em;" class="mjx-vsize"></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">⌋</span></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span>   <a class='hidden_link' href='#adapt.shuf-2.1.sentence-1'>.</a></div></div></li><li id='adapt.shuf-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#adapt.shuf-2.2'>(2.2)</a></div><div class='texpara'><div id='adapt.shuf-2.2.sentence-1' class='sentence'>Set <span class='math'><span class='mathalpha'>Y</span></span> to <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.186em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.186em;">V</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span></span></span></span></span> and then set <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.186em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.186em;">V</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.519em;">j</span></span></span></span></span></span></span></span> to <span class='math'><span class='texttt'>e<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></span><a class='hidden_link' href='#adapt.shuf-2.2.sentence-1'>.</a></div></div></li></ul></div></div></div><div class='para' id='adapt.shuf-3'><div class='marginalizedparent'><a class='marginalized' href='#adapt.shuf-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3719'>#</a></div><div class='texpara'><div id='adapt.shuf-3.sentence-1' class='sentence'>The generation algorithm
yields the last value of <span class='texttt'>Y</span>
 produced while advancing <span class='texttt'>e</span>'s state as described above<a class='hidden_link' href='#adapt.shuf-3.sentence-1'>.</a></div></div><div class='texpara'><span id='lib:shuffle_order_engine,result_type'><span id='lib:result_type,shuffle_order_engine'><span id='lib:shuffle_order_engine_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:shuffle_order_engine_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Engine, size_t k<span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> shuffle_order_engine <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> <span class='keyword'>typename</span> Engine<span class='operator'>::</span>result_type;

    <span class='comment'>// engine characteristics</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> size_t table_size <span class='operator'>=</span> k;
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> Engine<span class='operator'>::</span>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> Engine<span class='operator'>::</span>max<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class='comment'>// constructors and seeding functions</span>
    <span class="added">constexpr </span>shuffle_order_engine<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> shuffle_order_engine<span class='parenthesis'>(</span><span class='keyword'>const</span> Engine<span class='operator'>&amp;</span> e<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> shuffle_order_engine<span class='parenthesis'>(</span>Engine<span class='operator'>&amp;</span><span class='operator'>&amp;</span> e<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> shuffle_order_engine<span class='parenthesis'>(</span>result_type s<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>explicit</span> shuffle_order_engine<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span>result_type s<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Sseq<span class='anglebracket'>&gt;</span> <span class="added">constexpr </span><span class='keyword'>void</span> seed<span class='parenthesis'>(</span>Sseq<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> shuffle_order_engine<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> shuffle_order_engine<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> discard<span class='parenthesis'>(</span><span class='keyword'>unsigned</span> <span class='keyword'>long</span> <span class='keyword'>long</span> z<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span><span class='keyword'>const</span> Engine<span class='operator'>&amp;</span> base<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> e; <span class='curlybracket'>}</span>

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> shuffle_order_engine<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, shuffle_order_engine<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;

  <span class='keyword'>private</span><span class='operator'>:</span>
    Engine e;           <span class='comment'>// <i >exposition only</i></span>
    result_type V<span class='squarebracket'>[</span>k<span class='squarebracket'>]</span>;   <span class='comment'>// <i >exposition only</i></span>
    result_type Y;      <span class='comment'>// <i >exposition only</i></span>
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='para' id='adapt.shuf-4'><div class='marginalizedparent'><a class='marginalized' href='#adapt.shuf-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3775'>#</a></div><div class='texpara'><div id='adapt.shuf-4.sentence-1' class='sentence'>The following relation shall hold:
  <span class='texttt'><span class='literal'>0</span> <span class='anglebracket'>&lt;</span> k</span><a class='hidden_link' href='#adapt.shuf-4.sentence-1'>.</a></div></div></div><div class='para' id='adapt.shuf-5'><div class='marginalizedparent'><a class='marginalized' href='#adapt.shuf-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3779'>#</a></div><div class='texpara'><div id='adapt.shuf-5.sentence-1' class='sentence'>The textual representation
consists of
 the textual representation of <span class='texttt'>e</span>,
followed by
 the <span class='texttt'>k</span> values of <span class='math'><span class='mathalpha'>V</span></span>,
followed by
 the value of <span class='math'><span class='mathalpha'>Y</span></span><a class='hidden_link' href='#adapt.shuf-5.sentence-1'>.</a></div></div></div><div class='para' id='adapt.shuf-6'><div class='marginalizedparent'><a class='marginalized' href='#adapt.shuf-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3788'>#</a></div><div class='texpara'><div id='adapt.shuf-6.sentence-1' class='sentence'>In addition to its behavior
pursuant to subclause <a href='#req.adapt' title='29.5.3.5&emsp;Random number engine adaptor requirements'>[rand.<span class='shy'></span>req.<span class='shy'></span>adapt]</a>,
each constructor<a class='index' id='lib:shuffle_order_engine,constructor'></a>
that is not a copy constructor
initializes <span class='math'><span class='texttt'>V<span class='squarebracket'>[</span><span class='literal'>0</span><span class='squarebracket'>]</span></span>, &hellip;, <span class='texttt'>V<span class='squarebracket'>[</span>k <span class='operator'>-</span> <span class='literal'>1</span><span class='squarebracket'>]</span></span></span> and <span class='math'><span class='mathalpha'>Y</span></span>,
in that order,
with values returned by successive invocations of <span class='texttt'>e<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#adapt.shuf-6.sentence-1'>.</a></div> </div></div></div></div><div id='predef' class='section'><h3 ><a class='secnum' href='#predef' style='min-width:80pt'>29.5.6</a> Engines and engine adaptors with predefined parameters <a class='abbr_ref' href='rand.predef'>[rand.predef]</a></h3><div class='texpara'><a class='index' id=':random_number_engine,with_predefined_parameters'></a><a class='index' id=':random_number_engine_adaptor,with_predefined_parameters'></a><a class='index' id=':random_number_generation,predefined_engines_and_adaptors'></a></div><div class='texpara'><div id='lib:minstd_rand0'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:minstd_rand0'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>using</span> minstd_rand0 <span class='operator'>=</span>
      linear_congruential_engine<span class='anglebracket'>&lt;</span>uint_fast32_t, <span class='literal'>16'807</span>, <span class='literal'>0</span>, <span class='literal'>2'147'483'647</span><span class='anglebracket'>&gt;</span>;
</code></div></div></div><div class='para' id='predef-1'><div class='marginalizedparent'><a class='marginalized' href='#predef-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3821'>#</a></div><div class='texpara'><div id='predef-1.sentence-1' class='sentence'><i >Required behavior</i>: The <span class='math'><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;">10000</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-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">th</span></span></span></span></span></span></span></span> consecutive invocation
 of a default-constructed object
 of type <span class='texttt'>minstd_<span class='shy'></span>rand0</span>
 produces the value <span class='math'>1043618065</span><a class='hidden_link' href='#predef-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:minstd_rand'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:minstd_rand'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>using</span> minstd_rand <span class='operator'>=</span>
      linear_congruential_engine<span class='anglebracket'>&lt;</span>uint_fast32_t, <span class='literal'>48'271</span>, <span class='literal'>0</span>, <span class='literal'>2'147'483'647</span><span class='anglebracket'>&gt;</span>;
</code></div></div></div><div class='para' id='predef-2'><div class='marginalizedparent'><a class='marginalized' href='#predef-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3836'>#</a></div><div class='texpara'><div id='predef-2.sentence-1' class='sentence'><i >Required behavior</i>: The <span class='math'><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;">10000</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-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">th</span></span></span></span></span></span></span></span> consecutive invocation
 of a default-constructed object
 of type <span class='texttt'>minstd_<span class='shy'></span>rand</span>
 produces the value <span class='math'>399268537</span><a class='hidden_link' href='#predef-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:mt19937'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mt19937'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>using</span> mt19937 <span class='operator'>=</span>
      mersenne_twister_engine<span class='anglebracket'>&lt;</span>uint_fast32_t, <span class='literal'>32</span>, <span class='literal'>624</span>, <span class='literal'>397</span>, <span class='literal'>31</span>,
       <span class='literal'>0x9908'b0df</span>, <span class='literal'>11</span>, <span class='literal'>0xffff'ffff</span>, <span class='literal'>7</span>, <span class='literal'>0x9d2c'5680</span>, <span class='literal'>15</span>, <span class='literal'>0xefc6'0000</span>, <span class='literal'>18</span>, <span class='literal'>1'812'433'253</span><span class='anglebracket'>&gt;</span>;
</code></div></div></div><div class='para' id='predef-3'><div class='marginalizedparent'><a class='marginalized' href='#predef-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3852'>#</a></div><div class='texpara'><div id='predef-3.sentence-1' class='sentence'><i >Required behavior</i>: The <span class='math'><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;">10000</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-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">th</span></span></span></span></span></span></span></span> consecutive invocation
 of a default-constructed object
 of type <span class='texttt'>mt19937</span>
 produces the value <span class='math'>4123659995</span><a class='hidden_link' href='#predef-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:mt19937_64'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mt19937_64'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>using</span> mt19937_64 <span class='operator'>=</span>
      mersenne_twister_engine<span class='anglebracket'>&lt;</span>uint_fast64_t, <span class='literal'>64</span>, <span class='literal'>312</span>, <span class='literal'>156</span>, <span class='literal'>31</span>,
       <span class='literal'>0xb502'6f5a'a966'19e9</span>, <span class='literal'>29</span>, <span class='literal'>0x5555'5555'5555'5555</span>, <span class='literal'>17</span>,
       <span class='literal'>0x71d6'7fff'eda6'0000</span>, <span class='literal'>37</span>, <span class='literal'>0xfff7'eee0'0000'0000</span>, <span class='literal'>43</span>, <span class='literal'>6'364'136'223'846'793'005</span><span class='anglebracket'>&gt;</span>;
</code></div></div></div><div class='para' id='predef-4'><div class='marginalizedparent'><a class='marginalized' href='#predef-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3869'>#</a></div><div class='texpara'><div id='predef-4.sentence-1' class='sentence'><i >Required behavior</i>: The <span class='math'><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;">10000</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-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">th</span></span></span></span></span></span></span></span> consecutive invocation
 of a default-constructed object
 of type <span class='texttt'>mt19937_<span class='shy'></span>64</span>
 produces the value <span class='math'>9981545732273789042</span><a class='hidden_link' href='#predef-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:ranlux24_base'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:ranlux24_base'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>using</span> ranlux24_base <span class='operator'>=</span>
      subtract_with_carry_engine<span class='anglebracket'>&lt;</span>uint_fast32_t, <span class='literal'>24</span>, <span class='literal'>10</span>, <span class='literal'>24</span><span class='anglebracket'>&gt;</span>;
</code></div></div></div><div class='para' id='predef-5'><div class='marginalizedparent'><a class='marginalized' href='#predef-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3884'>#</a></div><div class='texpara'><div id='predef-5.sentence-1' class='sentence'><i >Required behavior</i>: The <span class='math'><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;">10000</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-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">th</span></span></span></span></span></span></span></span> consecutive invocation
 of a default-constructed object
 of type <span class='texttt'>ranlux24_<span class='shy'></span>base</span>
 produces the value
 <span class='math'>7937952</span><a class='hidden_link' href='#predef-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:ranlux48_base'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:ranlux48_base'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>using</span> ranlux48_base <span class='operator'>=</span>
      subtract_with_carry_engine<span class='anglebracket'>&lt;</span>uint_fast64_t, <span class='literal'>48</span>, <span class='literal'>5</span>, <span class='literal'>12</span><span class='anglebracket'>&gt;</span>;
</code></div></div></div><div class='para' id='predef-6'><div class='marginalizedparent'><a class='marginalized' href='#predef-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3900'>#</a></div><div class='texpara'><div id='predef-6.sentence-1' class='sentence'><i >Required behavior</i>: The <span class='math'><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;">10000</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-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">th</span></span></span></span></span></span></span></span> consecutive invocation
 of a default-constructed object
 of type <span class='texttt'>ranlux48_<span class='shy'></span>base</span>
 produces the value
 <span class='math'>61839128582725</span><a class='hidden_link' href='#predef-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:ranlux24'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:ranlux24'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>using</span> ranlux24 <span class='operator'>=</span> discard_block_engine<span class='anglebracket'>&lt;</span>ranlux24_base, <span class='literal'>223</span>, <span class='literal'>23</span><span class='anglebracket'>&gt;</span>;
</code></div></div></div><div class='para' id='predef-7'><div class='marginalizedparent'><a class='marginalized' href='#predef-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3915'>#</a></div><div class='texpara'><div id='predef-7.sentence-1' class='sentence'><i >Required behavior</i>: The <span class='math'><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;">10000</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-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">th</span></span></span></span></span></span></span></span> consecutive invocation
 of a default-constructed object
 of type <span class='texttt'>ranlux24</span>
 produces the value
 <span class='math'>9901578</span><a class='hidden_link' href='#predef-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:ranlux48'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:ranlux48'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>using</span> ranlux48 <span class='operator'>=</span> discard_block_engine<span class='anglebracket'>&lt;</span>ranlux48_base, <span class='literal'>389</span>, <span class='literal'>11</span><span class='anglebracket'>&gt;</span>;
</code></div></div></div><div class='para' id='predef-8'><div class='marginalizedparent'><a class='marginalized' href='#predef-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3930'>#</a></div><div class='texpara'><div id='predef-8.sentence-1' class='sentence'><i >Required behavior</i>: The <span class='math'><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;">10000</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-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">th</span></span></span></span></span></span></span></span> consecutive invocation
 of a default-constructed object
 of type <span class='texttt'>ranlux48</span>
 produces the value
 <span class='math'>249142670248501</span><a class='hidden_link' href='#predef-8.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:knuth_b'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:knuth_b'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>using</span> knuth_b <span class='operator'>=</span> shuffle_order_engine<span class='anglebracket'>&lt;</span>minstd_rand0,<span class='literal'>256</span><span class='anglebracket'>&gt;</span>;
</code></div></div></div><div class='para' id='predef-9'><div class='marginalizedparent'><a class='marginalized' href='#predef-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3945'>#</a></div><div class='texpara'><div id='predef-9.sentence-1' class='sentence'><i >Required behavior</i>: The <span class='math'><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;">10000</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-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">th</span></span></span></span></span></span></span></span> consecutive invocation
 of a default-constructed object
 of type <span class='texttt'>knuth_<span class='shy'></span>b</span>
 produces the value <span class='math'>1112339016</span><a class='hidden_link' href='#predef-9.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:default_random_engine'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:default_random_engine'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>using</span> default_random_engine <span class='operator'>=</span> <i ><a class='index' id=':type_of_default_random_engine'></a>implementation-defined</i>;
</code></div></div></div><div class='para' id='predef-10'><div class='marginalizedparent'><a class='marginalized' href='#predef-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3959'>#</a></div><div class='texpara'><div id='predef-10.sentence-1' class='sentence'><i >Remarks</i>: The choice of engine type
named by this <span id=':typedef__'><span class='texttt'><span class='keyword'>typedef</span></span></span>
is <a class='index' id=':type_of_default_random_engine_'></a>implementation-defined<a class='hidden_link' href='#predef-10.sentence-1'>.</a></div> <div id='predef-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#predef-note-1'>1</a></i>:&ensp;<div id='predef-10.sentence-2' class='sentence'>The implementation
 can select this type
 on the basis of performance,
 size,
 quality,
 or any combination of such factors,
 so as to provide at least acceptable engine behavior
 for relatively casual, inexpert, and/or lightweight use<a class='hidden_link' href='#predef-10.sentence-2'>.</a></div> <div id='predef-10.sentence-3' class='sentence'>Because different implementations
 can select different underlying engine types,
 code that uses this <span id=':typedef___'><span class='texttt'><span class='keyword'>typedef</span></span></span>
 need not generate identical sequences across implementations<a class='hidden_link' href='#predef-10.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div><div class='texpara'><div id='lib:philox4x32'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:philox4x32'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>using</span> philox4x32 <span class='operator'>=</span>
      philox_engine<span class='anglebracket'>&lt;</span>uint_fast32_t, <span class='literal'>32</span>, <span class='literal'>4</span>, <span class='literal'>10</span>,
       <span class='literal'>0xCD9E8D57</span>, <span class='literal'>0x9E3779B9</span>, <span class='literal'>0xD2511F53</span>, <span class='literal'>0xBB67AE85</span><span class='anglebracket'>&gt;</span>;
</code></div></div></div><div class='para' id='predef-11'><div class='marginalizedparent'><a class='marginalized' href='#predef-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L3988'>#</a></div><div class='texpara'><div id='predef-11.sentence-1' class='sentence'><i >Required behavior</i>: The <span class='math'><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;">10000</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-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">th</span></span></span></span></span></span></span></span> consecutive invocation
a default-constructed object of type <span class='texttt'>philox4x32</span>
produces the value <span class='math'>1955073260</span><a class='hidden_link' href='#predef-11.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:philox4x64'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:philox4x64'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>using</span> philox4x64 <span class='operator'>=</span>
      philox_engine<span class='anglebracket'>&lt;</span>uint_fast64_t, <span class='literal'>64</span>, <span class='literal'>4</span>, <span class='literal'>10</span>,
       <span class='literal'>0xCA5A826395121157</span>, <span class='literal'>0x9E3779B97F4A7C15</span>, <span class='literal'>0xD2E7470EE14C6C93</span>, <span class='literal'>0xBB67AE8584CAA73B</span><span class='anglebracket'>&gt;</span>;
</code></div></div></div><div class='para' id='predef-12'><div class='marginalizedparent'><a class='marginalized' href='#predef-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4003'>#</a></div><div class='texpara'><div id='predef-12.sentence-1' class='sentence'><i >Required behavior</i>: The <span class='math'><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;">10000</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-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">th</span></span></span></span></span></span></span></span> consecutive invocation
a default-constructed object of type <span class='texttt'>philox4x64</span>
produces the value <span class='math'>3409172418970261260</span><a class='hidden_link' href='#predef-12.sentence-1'>.</a></div></div></div></div><div class='texpara'></div></div><div id='device' class='section'><h3 ><a class='secnum' href='#device' style='min-width:80pt'>29.5.7</a> Class <span class='texttt'>random_<span class='shy'></span>device</span> <a class='abbr_ref' href='rand.device'>[rand.device]</a></h3><div class='texpara'><a class='index' id='lib:random_device'></a></div><div class='para' id='device-1'><div class='marginalizedparent'><a class='marginalized' href='#device-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4026'>#</a></div><div class='texpara'><div id='device-1.sentence-1' class='sentence'>A <span class='texttt'>random_<span class='shy'></span>device</span>
uniform random bit generator
produces nondeterministic random numbers<a class='hidden_link' href='#device-1.sentence-1'>.</a></div></div></div><div class='para' id='device-2'><div class='marginalizedparent'><a class='marginalized' href='#device-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4031'>#</a></div><div class='texpara'><div id='device-2.sentence-1' class='sentence'>If implementation limitations
prevent generating nondeterministic random numbers,
the implementation may employ a random number engine<a class='hidden_link' href='#device-2.sentence-1'>.</a></div></div><div class='texpara'><span id='lib:random_device,result_type'><span id='lib:result_type,random_device'><span id='lib:random_device_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:random_device_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>class</span> random_device <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> <span class='keyword'>unsigned</span> <span class='keyword'>int</span>;

    <span class='comment'>// generator characteristics</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> numeric_limits<span class='anglebracket'>&lt;</span>result_type<span class='anglebracket'>&gt;</span><span class='operator'>::</span>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class='keyword'>static</span> <span class='keyword'>constexpr</span> result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> numeric_limits<span class='anglebracket'>&lt;</span>result_type<span class='anglebracket'>&gt;</span><span class='operator'>::</span>max<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class='comment'>// constructors</span>
    random_device<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> random_device<span class='parenthesis'>(</span><i >implementation-defined</i><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class='keyword'>explicit</span> random_device<span class='parenthesis'>(</span><span class='keyword'>const</span> string<span class='operator'>&amp;</span> token<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class='keyword'>double</span> entropy<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// no copy functions</span>
    random_device<span class='parenthesis'>(</span><span class='keyword'>const</span> random_device<span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
    <span class='keyword'>void</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> random_device<span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:random_device,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:random_device,constructor'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>explicit</span> random_device<span class='parenthesis'>(</span><span class='keyword'>const</span> string<span class='operator'>&amp;</span> token<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='device-3'><div class='marginalizedparent'><a class='marginalized' href='#device-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4073'>#</a></div><div class='texpara'><div id='device-3.sentence-1' class='sentence'><i >Throws</i>: A value of an <a class='index' id=':exception_type_when_random_device_constructor_fails'></a>implementation-defined type
 derived from <span class='texttt'>exception</span>
 if the <span class='texttt'>random_<span class='shy'></span>device</span> cannot be initialized<a class='hidden_link' href='#device-3.sentence-1'>.</a></div></div></div></div><div class='para' id='device-4'><div class='marginalizedparent'><a class='marginalized' href='#device-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4079'>#</a></div><div class='texpara'><div id='device-4.sentence-1' class='sentence'><i >Remarks</i>: The semantics of the <span class='texttt'>token</span> parameter
 and the token value used by the default constructor are
 <a class='index' id=':semantics_of_token_parameter_and_default_token_value_used_by_random_device_constructors'></a>implementation-defined<a class='hidden_link' href='#device-4.sentence-1'>.</a><a class='footnoteref' href='#footnote-244' id='footnoteref-244' title='The parameter is intended to allow an implementation to differentiate between different sources of randomness.'>244</a></div></div></div></div><div class='texpara'><div id='lib:random_device,entropy'><div id='lib:entropy,random_device'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:entropy,random_device'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>double</span> entropy<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div><div class='para' id='device-5'><div class='marginalizedparent'><a class='marginalized' href='#device-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4097'>#</a></div><div class='texpara'><div id='device-5.sentence-1' class='sentence'><i >Returns</i>: If the implementation employs a random number engine,
 returns <span class='math'>0.0</span><a class='hidden_link' href='#device-5.sentence-1'>.</a></div> <div id='device-5.sentence-2' class='sentence'>Otherwise, returns an entropy estimate<a class='footnoteref' href='#footnote-245' id='footnoteref-245' title='If a device has n states whose respective probabilities are �&hellip;�, the device entropy S is defined as S = - ∑�.'>245</a>
 for the random numbers returned by <span class='texttt'><span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>,
 in the range
   <span class='texttt'>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
 to
   <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">2</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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.519em; padding-bottom: 0.372em;">max<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span><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></span><a class='hidden_link' href='#device-5.sentence-2'>.</a></div></div></div></div><div class='texpara'><div id='lib:random_device,operator()'><div id='lib:operator(),random_device'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator(),random_device'>🔗</a></div><code class='itemdeclcode'>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='device-6'><div class='marginalizedparent'><a class='marginalized' href='#device-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4122'>#</a></div><div class='texpara'><div id='device-6.sentence-1' class='sentence'><i >Returns</i>: A nondeterministic random value,
 uniformly distributed
 between <span class='texttt'>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> and <span class='texttt'>max<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> (inclusive)<a class='hidden_link' href='#device-6.sentence-1'>.</a></div> <div id='device-6.sentence-2' class='sentence'>It is <a class='index' id=':how_random_device::operator()_generates_values'></a>implementation-defined
 how these values are generated<a class='hidden_link' href='#device-6.sentence-2'>.</a></div></div></div></div><div class='para' id='device-7'><div class='marginalizedparent'><a class='marginalized' href='#device-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4130'>#</a></div><div class='texpara'><div id='device-7.sentence-1' class='sentence'><i >Throws</i>: A value of an <a class='index' id=':exception_type_when_random_device::operator()_fails'></a>implementation-defined
 type derived from <span class='texttt'>exception</span>
 if a random number cannot be obtained<a class='hidden_link' href='#device-7.sentence-1'>.</a></div></div></div></div><div class='footnoteSeparator'></div><div class='footnote' id='footnote-244'><div class='texpara'><a class='footnotenum' href='#footnote-244'>244)</a><a class='footnoteBacklink' href='#footnoteref-244'>244)</a> <div id='footnote-244.sentence-1' class='sentence'>The parameter is intended
   to allow an implementation to differentiate
   between different sources of randomness<a class='hidden_link' href='#footnote-244.sentence-1'>.</a></div></div></div><div class='footnote' id='footnote-245'><div class='texpara'><a class='footnotenum' href='#footnote-245'>245)</a><a class='footnoteBacklink' href='#footnoteref-245'>245)</a> <div id='footnote-245.sentence-1' class='sentence'>If a device has <span class='math'><span class='mathalpha'>n</span></span> states
   whose respective probabilities are
   <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.109em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.109em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span></span></span></span></span>,
   the device entropy <span class='math'><span class='mathalpha'>S</span></span> is defined as<br></div> <div id='footnote-245.sentence-2' class='sentence'>
   <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</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-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-munderover MJXc-space1"><span class="mjx-base"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">∑</span></span></span><span class="mjx-stack" style="vertical-align: -0.31em;"><span class="mjx-sup" style="font-size: 70.7%; padding-bottom: 0.351em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span><span class="mjx-sub" style="font-size: 70.7%; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.109em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.109em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span><a class='hidden_link' href='#footnote-245.sentence-2'>.</a></div></div></div></div><div id='util' class='section'><h3 ><a class='secnum' href='#util' style='min-width:80pt'>29.5.8</a> Utilities <a class='abbr_ref' href='rand.util'>[rand.util]</a></h3><div class='texpara'><a class='index' id=':random_number_generation,utilities'></a></div><div id='util.seedseq' class='section'><h4 ><a class='secnum' href='#util.seedseq' style='min-width:95pt'>29.5.8.1</a> Class <span class='texttt'>seed_<span class='shy'></span>seq</span> <a class='abbr_ref' href='rand.util.seedseq'>[rand.util.seedseq]</a></h4><div class='texpara'><span id='lib:seed_seq,result_type'><span id='lib:result_type,seed_seq'><span id='lib:seed_seq'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:seed_seq'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>class</span> seed_seq <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> uint_least32_t;

    <span class='comment'>// constructors</span>
    <span class="added">constexpr </span>seed_seq<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>seed_seq<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> il<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>seed_seq<span class='parenthesis'>(</span>InputIterator begin, InputIterator end<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RandomAccessIterator<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span><span class='keyword'>void</span> generate<span class='parenthesis'>(</span>RandomAccessIterator begin, RandomAccessIterator end<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>size_t size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> OutputIterator<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span>OutputIterator dest<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// no copy functions</span>
    seed_seq<span class='parenthesis'>(</span><span class='keyword'>const</span> seed_seq<span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
    <span class='keyword'>void</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> seed_seq<span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;

  <span class='keyword'>private</span><span class='operator'>:</span>
    vector<span class='anglebracket'>&lt;</span>result_type<span class='anglebracket'>&gt;</span> v;      <span class='comment'>// <i >exposition only</i></span>
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div><div class='texpara'><div id='lib:seed_seq,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:seed_seq,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>seed_seq<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
</code></div></div></div><div class='para' id='util.seedseq-1'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4197'>#</a></div><div class='texpara'><div id='util.seedseq-1.sentence-1' class='sentence'><i >Postconditions</i>: <span class='texttt'>v<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#util.seedseq-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:seed_seq,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:seed_seq,constructor_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T<span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>seed_seq<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> il<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='util.seedseq-2'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4210'>#</a></div><div class='texpara'><div id='util.seedseq-2.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>T</span> is an integer type<a class='hidden_link' href='#util.seedseq-2.sentence-1'>.</a></div></div></div></div><div class='para' id='util.seedseq-3'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4214'>#</a></div><div class='texpara'><div id='util.seedseq-3.sentence-1' class='sentence'><i >Effects</i>: Same as <span class='texttt'>seed_<span class='shy'></span>seq<span class='parenthesis'>(</span>il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#util.seedseq-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:seed_seq,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:seed_seq,constructor__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>seed_seq<span class='parenthesis'>(</span>InputIterator begin, InputIterator end<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='util.seedseq-4'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4227'>#</a></div><div class='texpara'><div id='util.seedseq-4.sentence-1' class='sentence'><i >Mandates</i>: <span class='texttt'>iterator_<span class='shy'></span>traits<span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>value_<span class='shy'></span>type</span>
  is an integer type<a class='hidden_link' href='#util.seedseq-4.sentence-1'>.</a></div></div></div></div><div class='para' id='util.seedseq-5'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4232'>#</a></div><div class='texpara'><div id='util.seedseq-5.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>InputIterator</span> meets the
  <a href='input.iterators#:Cpp17InputIterator' title='24.3.5.3&emsp;Input iterators&emsp;[input.iterators]'><i >Cpp17InputIterator</i></a> requirements (<a href='input.iterators' title='24.3.5.3&emsp;Input iterators'>[input.<span class='shy'></span>iterators]</a>)<a class='hidden_link' href='#util.seedseq-5.sentence-1'>.</a></div></div></div></div><div class='para' id='util.seedseq-6'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4237'>#</a></div><div class='texpara'><div id='util.seedseq-6.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>v</span>
by the following algorithm:
<span class='codeblock'><span class='keyword'>for</span> <span class='parenthesis'>(</span>InputIterator s <span class='operator'>=</span> begin; s <span class='operator'>!</span><span class='operator'>=</span> end; <span class='operator'>+</span><span class='operator'>+</span>s<span class='parenthesis'>)</span>
 v<span class='operator'>.</span>push_back<span class='parenthesis'>(</span><span class='parenthesis'>(</span><span class='operator'>*</span>s<span class='parenthesis'>)</span><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><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-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;">32</span></span></span></span></span></span></span></span></span></span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:seed_seq,generate'><div id='lib:generate,seed_seq'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:generate,seed_seq'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RandomAccessIterator<span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span><span class='keyword'>void</span> generate<span class='parenthesis'>(</span>RandomAccessIterator begin, RandomAccessIterator end<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='util.seedseq-7'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4254'>#</a></div><div class='texpara'><div id='util.seedseq-7.sentence-1' class='sentence'><i >Mandates</i>: <span class='texttt'>iterator_<span class='shy'></span>traits<span class='anglebracket'>&lt;</span>RandomAccessIterator<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>&#x200b;value_<span class='shy'></span>type</span>
  is an unsigned integer type capable of accommodating 32-bit quantities<a class='hidden_link' href='#util.seedseq-7.sentence-1'>.</a></div></div></div></div><div class='para' id='util.seedseq-8'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4259'>#</a></div><div class='texpara'><div id='util.seedseq-8.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>RandomAccessIterator</span> meets the
  <a href='random.access.iterators#:Cpp17RandomAccessIterator' title='24.3.5.7&emsp;Random access iterators&emsp;[random.access.iterators]'><i >Cpp17RandomAccessIterator</i></a> requirements (<a href='random.access.iterators' title='24.3.5.7&emsp;Random access iterators'>[random.<span class='shy'></span>access.<span class='shy'></span>iterators]</a>)
  and the requirements of a mutable iterator<a class='hidden_link' href='#util.seedseq-8.sentence-1'>.</a></div></div></div></div><div class='para' id='util.seedseq-9'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4265'>#</a></div><div class='texpara'><div id='util.seedseq-9.sentence-1' class='sentence'><i >Effects</i>: Does nothing if <span class='texttt'>begin <span class='operator'>=</span><span class='operator'>=</span> end</span><a class='hidden_link' href='#util.seedseq-9.sentence-1'>.</a></div> <div id='util.seedseq-9.sentence-2' class='sentence'>Otherwise,
 with <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</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-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.519em; padding-bottom: 0.372em;">v<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span>
 and  <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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-texatom MJXc-space3"><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;">end</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">begin</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span>,
 fills the supplied range <span class='math'>[<span class='texttt'>begin</span>,<span class='texttt'>end</span>)</span>
 according to the following algorithm
 in which
 each operation is to be carried out modulo <span class='math'><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-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;">32</span></span></span></span></span></span></span></span></span></span>,
 each indexing operator applied to <span class='texttt'>begin</span> is to be taken modulo <span class='math'><span class='mathalpha'>n</span></span>,
 and <span class='math'><span class='mathalpha'>T</span>(<span class='mathalpha'>x</span>)</span> is defined as <span class='math'><span class='mathalpha'>x</span> <span class='math'><span class='mathbin'><span class='mathsf'>xor</span></span></span>(<span class='mathalpha'>x</span> <span class='math'><span class='mathbin'><span class='mathsf'>rshift</span></span></span>27)</span>:
<ul class='itemize'><li id='util.seedseq-9.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#util.seedseq-9.1'>(9.1)</a></div><div class='texpara'><div id='util.seedseq-9.1.sentence-1' class='sentence'>By way of initialization,
   set each element of the range to the value <span class='texttt'><span class='literal'>0x8b8b8b8b</span></span><a class='hidden_link' href='#util.seedseq-9.1.sentence-1'>.</a></div> <div id='util.seedseq-9.1.sentence-2' class='sentence'>Additionally,
   for use in subsequent steps,
   let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</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-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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>
   and let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em; padding-right: 0.014em;">q</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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span>,
   where
   <br><span class='math'><span class="mjx-chtml MJXc-display" style="text-align: center;"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</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-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≥</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">623</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mstyle"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;"> ? </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;">11</span></span><span class="mjx-mstyle"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.372em;"> : </span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≥</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">68</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mstyle"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;"> ? </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;">7</span></span><span class="mjx-mstyle"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.372em;"> : </span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≥</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">39</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mstyle"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;"> ? </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;">5</span></span><span class="mjx-mstyle"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.372em;"> : </span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≥</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">7</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mstyle"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;"> ? </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;">3</span></span><span class="mjx-mstyle"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.372em;"> : </span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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 class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.519em;">;</span></span></span></span></span></span></div></div></li><li id='util.seedseq-9.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#util.seedseq-9.2'>(9.2)</a></div><div class='texpara'><div id='util.seedseq-9.2.sentence-1' class='sentence'>With <span class='math'><span class='mathalpha'>m</span></span> as the larger of <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span> and <span class='math'><span class='mathalpha'>n</span></span>,
   transform the elements of the range:
   iteratively for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span>,
   calculate values
   <br><span class='math'><span class="mjx-chtml MJXc-display" style="text-align: center;"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mtable" style="vertical-align: -2.366em; padding: 0px 0.167em;"><span class="mjx-table"><span class="mjx-mtr" style="height: 1.225em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; text-align: right; width: 0.84em;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</span></span></span></span><span class="mjx-strut"></span></span></span><span class="mjx-mtd" style="padding: 0px 0.139em 0px 0px; width: 1.056em;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mi"></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-strut"></span></span></span><span class="mjx-mtd" style="padding: 0px 0px 0px 0.139em; text-align: left; width: 25.235em;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1664525</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.12em;">T</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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.519em; padding-bottom: 0.519em;">begin<span class='squarebracket'>[</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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.519em; padding-bottom: 0.372em;"><span class='squarebracket'>]</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">begin<span class='squarebracket'>[</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</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.519em; padding-bottom: 0.372em;"><span class='squarebracket'>]</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-sans-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span></span></span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">begin<span class='squarebracket'>[</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><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-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.519em; padding-bottom: 0.372em;"><span class='squarebracket'>]</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-strut"></span></span></span></span><span class="mjx-mtr" style="height: 4.007em;"><span class="mjx-mtd" style="padding: 0.15em 0px 0px 0px; text-align: right;"><span class="mjx-mrow" style="margin-top: 1.179em;"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">2</span></span></span></span><span class="mjx-strut"></span></span></span><span class="mjx-mtd" style="padding: 0.15em 0.139em 0px 0px;"><span class="mjx-mrow" style="margin-top: 1.179em;"><span class="mjx-mi"></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-strut"></span></span></span><span class="mjx-mtd" style="padding: 0.15em 0px 0px 0.139em; text-align: left;"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mrow MJXc-space2"><span class="mjx-mo" style="vertical-align: -0.755em;"><span class="mjx-delim-v"><span class="mjx-char MJXc-TeX-size4-R" style="padding-top: 0.667em; padding-bottom: 0.298em;">⎧</span><span class="mjx-char MJXc-TeX-size4-R" style="line-height: 0.085em; margin-bottom: 0.087em; margin-top: -0.137em;">⎪</span><span class="mjx-char MJXc-TeX-size4-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">⎨</span><span class="mjx-char MJXc-TeX-size4-R" style="line-height: 0.085em; margin-bottom: 0.087em; margin-top: -0.137em;">⎪</span><span class="mjx-char MJXc-TeX-size4-R" style="margin-top: -0.217em; padding-bottom: 1.182em;">⎩</span></span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mtable" style="vertical-align: -1.679em; padding: 0px 0.167em;"><span class="mjx-table"><span class="mjx-mtr" style="height: 1.219em;"><span class="mjx-mtd" style="padding: 0px 0.5em 0px 0px; width: 8.606em;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span><span class="mjx-strut"></span></span></span><span class="mjx-mtd" style="padding: 0px 0px 0px 0.5em; text-align: left; width: 4.685em;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mstyle"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">, </span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-strut"></span></span></span></span><span class="mjx-mtr" style="height: 1.419em;"><span class="mjx-mtd" style="padding: 0.2em 0.5em 0px 0px;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.519em; padding-bottom: 0.372em;">v<span class='squarebracket'>[</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><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-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.519em; padding-bottom: 0.372em;"><span class='squarebracket'>]</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-strut"></span></span></span><span class="mjx-mtd" style="padding: 0.2em 0px 0px 0.5em; text-align: left;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mstyle"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">, </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;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≤</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span><span class="mjx-strut"></span></span></span></span><span class="mjx-mtr" style="height: 1.219em;"><span class="mjx-mtd" style="padding: 0.2em 0.5em 0px 0px;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-strut"></span></span></span><span class="mjx-mtd" style="padding: 0.2em 0px 0px 0.5em; text-align: left;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mstyle"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">, </span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-strut"></span></span></span></span></span></span></span><span class="mjx-mo" style="width: 0.12em;"></span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></span>
   and, in order,
   increment <span class='texttt'>begin<span class='squarebracket'>[</span><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span></span></span></span></span><span class='squarebracket'>]</span></span> by <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</span></span></span></span></span></span></span></span>,
   increment <span class='texttt'>begin<span class='squarebracket'>[</span><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em; padding-right: 0.014em;">q</span></span></span></span></span></span><span class='squarebracket'>]</span></span> by <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">2</span></span></span></span></span></span></span></span>,
   and
   set <span class='texttt'>begin<span class='squarebracket'>[</span><span class='math'><span class='mathalpha'>k</span></span><span class='squarebracket'>]</span></span> to <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">2</span></span></span></span></span></span></span></span><a class='hidden_link' href='#util.seedseq-9.2.sentence-1'>.</a></div></div></li><li id='util.seedseq-9.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#util.seedseq-9.3'>(9.3)</a></div><div class='texpara'><div id='util.seedseq-9.3.sentence-1' class='sentence'>Transform the elements of the range again,
   beginning where the previous step ended:
   iteratively for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span>,
   calculate values
   <br><span class='math'><span class="mjx-chtml MJXc-display" style="text-align: center;"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mtable" style="vertical-align: -0.975em; padding: 0px 0.167em;"><span class="mjx-table"><span class="mjx-mtr" style="height: 1.225em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; text-align: right; width: 0.84em;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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-strut"></span></span></span><span class="mjx-mtd" style="padding: 0px 0.139em 0px 0px; width: 1.056em;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mi"></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-strut"></span></span></span><span class="mjx-mtd" style="padding: 0px 0px 0px 0.139em; text-align: left; width: 25.685em;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1566083941</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.12em;">T</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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.519em; padding-bottom: 0.519em;">begin<span class='squarebracket'>[</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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.519em; padding-bottom: 0.372em;"><span class='squarebracket'>]</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">begin<span class='squarebracket'>[</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</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.519em; padding-bottom: 0.372em;"><span class='squarebracket'>]</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">begin<span class='squarebracket'>[</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><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-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.519em; padding-bottom: 0.372em;"><span class='squarebracket'>]</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-strut"></span></span></span></span><span class="mjx-mtr" style="height: 1.225em;"><span class="mjx-mtd" style="padding: 0.15em 0px 0px 0px; text-align: right;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">4</span></span></span></span><span class="mjx-strut"></span></span></span><span class="mjx-mtd" style="padding: 0.15em 0.139em 0px 0px;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mi"></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-strut"></span></span></span><span class="mjx-mtd" style="padding: 0.15em 0px 0px 0.139em; text-align: left;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo" style="padding-left: 0.278em; padding-right: 0.278em;"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">mod</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></span>
   and, in order,
   update <span class='texttt'>begin<span class='squarebracket'>[</span><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span></span></span></span></span><span class='squarebracket'>]</span></span> by xoring it with <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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></span></span></span>,
   update <span class='texttt'>begin<span class='squarebracket'>[</span><span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em; padding-right: 0.014em;">q</span></span></span></span></span></span><span class='squarebracket'>]</span></span> by xoring it with <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">4</span></span></span></span></span></span></span></span>,
   and
   set <span class='texttt'>begin<span class='squarebracket'>[</span><span class='math'><span class='mathalpha'>k</span></span><span class='squarebracket'>]</span></span> to <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">4</span></span></span></span></span></span></span></span><a class='hidden_link' href='#util.seedseq-9.3.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='para' id='util.seedseq-10'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4338'>#</a></div><div class='texpara'><div id='util.seedseq-10.sentence-1' class='sentence'><i >Throws</i>: What and when <span class='texttt'>RandomAccessIterator</span> operations of <span class='texttt'>begin</span>
and <span class='texttt'>end</span> throw<a class='hidden_link' href='#util.seedseq-10.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:seed_seq,size'><div id='lib:size,seed_seq'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:size,seed_seq'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>size_t size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div><div class='para' id='util.seedseq-11'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4350'>#</a></div><div class='texpara'><div id='util.seedseq-11.sentence-1' class='sentence'><i >Returns</i>: The number of 32-bit units
 that would be returned
 by a call to <span class='texttt'>param<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#util.seedseq-11.sentence-1'>.</a></div></div></div></div><div class='para' id='util.seedseq-12'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4356'>#</a></div><div class='texpara'><div id='util.seedseq-12.sentence-1' class='sentence'><i >Complexity</i>: Constant time<a class='hidden_link' href='#util.seedseq-12.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:seed_seq,param'><div id='lib:param,seed_seq'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:param,seed_seq'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> OutputIterator<span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span>OutputIterator dest<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='util.seedseq-13'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-13'>13</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4368'>#</a></div><div class='texpara'><div id='util.seedseq-13.sentence-1' class='sentence'><i >Mandates</i>: Values of type <span class='texttt'>result_<span class='shy'></span>type</span> are writable (<a href='iterator.requirements.general' title='24.3.1&emsp;General'>[iterator.<span class='shy'></span>requirements.<span class='shy'></span>general]</a>) to <span class='texttt'>dest</span><a class='hidden_link' href='#util.seedseq-13.sentence-1'>.</a></div></div></div></div><div class='para' id='util.seedseq-14'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-14'>14</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4372'>#</a></div><div class='texpara'><div id='util.seedseq-14.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>OutputIterator</span> meets the
  <a href='output.iterators#:Cpp17OutputIterator' title='24.3.5.4&emsp;Output iterators&emsp;[output.iterators]'><i >Cpp17OutputIterator</i></a> requirements (<a href='output.iterators' title='24.3.5.4&emsp;Output iterators'>[output.<span class='shy'></span>iterators]</a>)<a class='hidden_link' href='#util.seedseq-14.sentence-1'>.</a></div></div></div></div><div class='para' id='util.seedseq-15'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-15'>15</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4377'>#</a></div><div class='texpara'><div id='util.seedseq-15.sentence-1' class='sentence'><i >Effects</i>: Copies the sequence of prepared 32-bit units
 to the given destination,
 as if by executing the following statement:
<span class='codeblock'>copy<span class='parenthesis'>(</span>v<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, v<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, dest<span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para' id='util.seedseq-16'><div class='marginalizedparent'><a class='marginalized' href='#util.seedseq-16'>16</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4386'>#</a></div><div class='texpara'><div id='util.seedseq-16.sentence-1' class='sentence'><i >Throws</i>: What and when <span class='texttt'>OutputIterator</span> operations of <span class='texttt'>dest</span> throw<a class='hidden_link' href='#util.seedseq-16.sentence-1'>.</a></div></div></div></div></div><div id='util.canonical' class='section'><h4 ><a class='secnum' href='#util.canonical' style='min-width:95pt'>29.5.8.2</a> Function template <span class='texttt'>generate_<span class='shy'></span>canonical</span> <a class='abbr_ref' href='rand.util.canonical'>[rand.util.canonical]</a></h4><div class='texpara'><div id='lib:generate_canonical'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:generate_canonical'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType, size_t digits, <span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>RealType generate_canonical<span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='util.canonical-1'><div class='marginalizedparent'><a class='marginalized' href='#util.canonical-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4403'>#</a></div><div class='texpara'><div id='util.canonical-1.sentence-1' class='sentence'>Let
<ul class='itemize'><li id='util.canonical-1.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#util.canonical-1.1'>(1.1)</a></div><span class='math'><span class='mathalpha'>r</span></span> be <span class='texttt'>numeric_<span class='shy'></span>limits<span class='anglebracket'>&lt;</span>RealType<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>radix</span>,</li><li id='util.canonical-1.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#util.canonical-1.2'>(1.2)</a></div><span class='math'><span class='mathalpha'>R</span></span> be <span class='math'><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.519em; padding-bottom: 0.519em;">g<span class='operator'>.</span>max<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">g<span class='operator'>.</span>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span>,</li><li id='util.canonical-1.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#util.canonical-1.3'>(1.3)</a></div><span class='math'><span class='mathalpha'>d</span></span> be the smaller of
  <span class='texttt'>digits</span> and <span class='texttt'>numeric_<span class='shy'></span>limits<span class='anglebracket'>&lt;</span>RealType<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>digits</span>,<a class='footnoteref' href='#footnote-246' id='footnoteref-246' title='d is introduced to avoid any attempt to produce more bits of randomness than can be held in RealType.'>246</a></li><li id='util.canonical-1.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#util.canonical-1.4'>(1.4)</a></div><span class='math'><span class='mathalpha'>k</span></span> be the smallest integer such that <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">R</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≥</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.003em;">d</span></span></span></span></span></span></span></span>, and</li><li id='util.canonical-1.5'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#util.canonical-1.5'>(1.5)</a></div><span class='math'><span class='mathalpha'>x</span></span> be <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">⌊</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">R</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.003em;">d</span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">⌋</span></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#util.canonical-1.sentence-1'>.</a></li></ul></div> <div id='util.canonical-1.sentence-2' class='sentence'>
An <a class='hidden_link' href='#def:attempt' title='29.5.8.2&emsp;Function template generate_&shy;canonical&emsp;[rand.util.canonical]'><span id='def:attempt'><i >attempt</i></span></a> is <span class='math'><span class='mathalpha'>k</span></span> invocations of <span class='texttt'>g<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
to obtain values <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.003em;">g</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.003em;">g</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span></span></span></span></span>, respectively,
and the calculation of a quantity <span class='math'><span class='mathalpha'>S</span></span> given by Formula  <a href='#eq:rand.gencanonical'>29.1</a>:
<div class='formula' id='eq:rand.gencanonical'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 18.049em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: -0.01em;"><span class="mjx-mlabeledtr" style="height: 3.047em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 11.337em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</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-munderover MJXc-space3"><span class="mjx-itable"><span class="mjx-row"><span class="mjx-cell"><span class="mjx-stack"><span class="mjx-over" style="font-size: 70.7%; padding-bottom: 0.176em; padding-top: 0.141em; padding-left: 0.122em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span><span class="mjx-op"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.74em; padding-bottom: 0.74em;">∑</span></span></span></span></span></span><span class="mjx-row"><span class="mjx-under" style="font-size: 70.7%; padding-top: 0.236em; padding-bottom: 0.141em; padding-left: 0.21em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.003em;">g</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">g<span class='operator'>.</span>min<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">R</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.584em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -2.556em;"><span class="mjx-label" style="height: 3.047em;"><span id="mjx-eqn-29.1" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: 0.783em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.1)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div></div></div></div><div class='para' id='util.canonical-2'><div class='marginalizedparent'><a class='marginalized' href='#util.canonical-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4425'>#</a></div><div class='texpara'><div id='util.canonical-2.sentence-1' class='sentence'><i >Effects</i>: Attempts are made until <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.003em;">d</span></span></span></span></span></span></span></span><a class='hidden_link' href='#util.canonical-2.sentence-1'>.</a></div> <div id='util.canonical-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#util.canonical-note-1'>1</a></i>:&ensp;<div id='util.canonical-2.sentence-2' class='sentence'>When <span class='math'><span class='mathalpha'>R</span></span> is a power of <span class='math'><span class='mathalpha'>r</span></span>, precisely one attempt is made<a class='hidden_link' href='#util.canonical-2.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div><div class='para' id='util.canonical-3'><div class='marginalizedparent'><a class='marginalized' href='#util.canonical-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4432'>#</a></div><div class='texpara'><div id='util.canonical-3.sentence-1' class='sentence'><i >Returns</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><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 class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span></span><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 class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></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-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.003em;">d</span></span></span></span></span></span></span></span><a class='hidden_link' href='#util.canonical-3.sentence-1'>.</a></div> <div id='util.canonical-note-2' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#util.canonical-note-2'>2</a></i>:&ensp;<div id='util.canonical-3.sentence-2' class='sentence'>The return value <span class='math'><span class='mathalpha'>c</span></span> satisfies
<span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≤</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">c</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</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;">1</span></span></span></span></span></span><a class='hidden_link' href='#util.canonical-3.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div><div class='para' id='util.canonical-4'><div class='marginalizedparent'><a class='marginalized' href='#util.canonical-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4440'>#</a></div><div class='texpara'><div id='util.canonical-4.sentence-1' class='sentence'><i >Throws</i>: What and when <span class='texttt'>g</span> throws<a class='hidden_link' href='#util.canonical-4.sentence-1'>.</a></div></div></div></div><div class='para' id='util.canonical-5'><div class='marginalizedparent'><a class='marginalized' href='#util.canonical-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4444'>#</a></div><div class='texpara'><div id='util.canonical-5.sentence-1' class='sentence'><i >Complexity</i>: Exactly <span class='math'><span class='mathalpha'>k</span></span> invocations of <span class='texttt'>g</span> per attempt<a class='hidden_link' href='#util.canonical-5.sentence-1'>.</a></div></div></div></div><div class='para nonNormativeOnly' id='util.canonical-6'><div class='marginalizedparent'><a class='marginalized' href='#util.canonical-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4448'>#</a></div><div class='texpara'><div id='util.canonical-note-3' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#util.canonical-note-3'>3</a></i>:&ensp;<div id='util.canonical-6.sentence-1' class='sentence'>If the values <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.003em;">g</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span> produced by <span class='texttt'>g</span> are uniformly distributed,
the instantiation's results are distributed as uniformly as possible<a class='hidden_link' href='#util.canonical-6.sentence-1'>.</a></div> <div id='util.canonical-6.sentence-2' class='sentence'>Obtaining a value in this way
can be a useful step
in the process of transforming
a value generated by a uniform random bit generator
into a value
that can be delivered by a random number distribution<a class='hidden_link' href='#util.canonical-6.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div><div class='para nonNormativeOnly' id='util.canonical-7'><div class='marginalizedparent'><a class='marginalized' href='#util.canonical-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4460'>#</a></div><div class='texpara'><div id='util.canonical-note-4' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#util.canonical-note-4'>4</a></i>:&ensp;<div id='util.canonical-7.sentence-1' class='sentence'>When <span class='math'><span class='mathalpha'>R</span></span> is a power of <span class='math'><span class='mathalpha'>r</span></span>,
an implementation can avoid using an arithmetic type that is wider
than the output when computing <span class='math'><span class='mathalpha'>S</span></span><a class='hidden_link' href='#util.canonical-7.sentence-1'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div><div class='texpara'></div><div class='footnoteSeparator'></div><div class='footnote' id='footnote-246'><div class='texpara'><a class='footnotenum' href='#footnote-246'>246)</a><a class='footnoteBacklink' href='#footnoteref-246'>246)</a> <div id='footnote-246.sentence-1' class='sentence'><span class='math'><span class='mathalpha'>d</span></span> is introduced to avoid any attempt
  to produce more bits of randomness
  than can be held in <span class='texttt'>RealType</span><a class='hidden_link' href='#footnote-246.sentence-1'>.</a></div></div></div></div></div><div id='dist' class='section'><h3 ><a class='secnum' href='#dist' style='min-width:80pt'>29.5.9</a> Random number distribution class templates <a class='abbr_ref' href='rand.dist'>[rand.dist]</a></h3><div class='texpara'><a class='index' id=':random_number_generation,distributions'></a></div><div id='dist.general' class='section'><h4 ><a class='secnum' href='#dist.general' style='min-width:95pt'>29.5.9.1</a> General <a class='abbr_ref' href='rand.dist.general'>[rand.dist.general]</a></h4><div class='para' id='dist.general-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.general-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4485'>#</a></div><div class='texpara'><div id='dist.general-1.sentence-1' class='sentence'>Each type instantiated
from a class template specified in <a href='#dist' title='29.5.9&emsp;Random number distribution class templates'>[rand.<span class='shy'></span>dist]</a>
meets the requirements
of a <a href='#req.dist' title='29.5.3.6&emsp;Random number distribution requirements&emsp;[rand.req.dist]'>random number distribution</a> type<a class='hidden_link' href='#dist.general-1.sentence-1'>.</a></div></div></div><div class='para' id='dist.general-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.general-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4491'>#</a></div><div class='texpara'><div id='dist.general-2.sentence-1' class='sentence'>Descriptions are provided in <a href='#dist' title='29.5.9&emsp;Random number distribution class templates'>[rand.<span class='shy'></span>dist]</a>
only for distribution operations
that are not described in <a href='#req.dist' title='29.5.3.6&emsp;Random number distribution requirements'>[rand.<span class='shy'></span>req.<span class='shy'></span>dist]</a>
or for operations where there is additional semantic information<a class='hidden_link' href='#dist.general-2.sentence-1'>.</a></div> <div id='dist.general-2.sentence-2' class='sentence'>In particular,
declarations for copy constructors,
for copy assignment operators,
for streaming operators,
and for equality and inequality operators
are not shown in the synopses<a class='hidden_link' href='#dist.general-2.sentence-2'>.</a></div></div></div><div class='para' id='dist.general-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.general-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4503'>#</a></div><div class='texpara'><div id='dist.general-3.sentence-1' class='sentence'>The algorithms for producing each
of the specified distributions are
<a class='index' id=':algorithms_for_producing_the_standard_random_number_distributions'></a>implementation-defined<a class='hidden_link' href='#dist.general-3.sentence-1'>.</a></div></div></div><div class='para' id='dist.general-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.general-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4508'>#</a></div><div class='texpara'><div id='dist.general-4.sentence-1' class='sentence'>The value of each probability density function <span class='math'><span class='mathalpha'>p</span>(<span class='mathalpha'>z</span>)</span>
and of each discrete probability function <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.003em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">z</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><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></span>
specified in this subclause
is <span class='math'>0</span>
everywhere outside its stated domain<a class='hidden_link' href='#dist.general-4.sentence-1'>.</a></div></div></div></div><div id='dist.uni' class='section'><h4 ><a class='secnum' href='#dist.uni' style='min-width:95pt'>29.5.9.2</a> Uniform distributions <a class='abbr_ref' href='rand.dist.uni'>[rand.dist.uni]</a></h4><div class='texpara'><a class='index' id=':uniform_distributions'></a><a class='index' id=':random_number_distributions,uniform'></a></div><div id='dist.uni.int' class='section'><h4 ><a class='secnum' href='#dist.uni.int' style='min-width:110pt'>29.5.9.2.1</a> Class template <span class='texttt'>uniform_<span class='shy'></span>int_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.uni.int'>[rand.dist.uni.int]</a></h4><div class='texpara'><a class='index' id='lib:uniform_int_distribution'></a></div><div class='para' id='dist.uni.int-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.uni.int-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4531'>#</a></div><div class='texpara'><div id='dist.uni.int-1.sentence-1' class='sentence'>A <span class='texttt'>uniform_<span class='shy'></span>int_<span class='shy'></span>distribution</span> random number distribution
produces random integers <span class='math'><span class='mathalpha'>i</span></span>,
<span class='math'><span class='mathalpha'>a</span> &ensp;≤&ensp;<span class='mathalpha'>i</span> &ensp;≤&ensp;<span class='mathalpha'>b</span></span>,
distributed according to
the constant discrete probability function in Formula  <a href='#eq:rand.dist.uni.int'>29.2</a><a class='hidden_link' href='#dist.uni.int-1.sentence-1'>.</a></div></div><div class='texpara'><div class='formula' id='eq:rand.dist.uni.int'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 17.614em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: -0.012em;"><span class="mjx-mlabeledtr" style="height: 1.075em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 10.902em;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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;">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-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -2.556em;"><span class="mjx-label" style="height: 1.075em;"><span id="mjx-eqn-29.2" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.2)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div><div class='texpara'><span id='lib:uniform_int_distribution,result_type'><span id='lib:result_type,uniform_int_distribution'><span id='lib:uniform_int_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:uniform_int_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> IntType <span class='operator'>=</span> <span class='keyword'>int</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> uniform_int_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> IntType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructors and reset functions</span>
    <span class="added">constexpr </span>uniform_int_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> uniform_int_distribution<span class='parenthesis'>(</span><span class='literal'>0</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> uniform_int_distribution<span class='parenthesis'>(</span>IntType a, IntType b <span class='operator'>=</span> numeric_limits<span class='anglebracket'>&lt;</span>IntType<span class='anglebracket'>&gt;</span><span class='operator'>::</span>max<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> uniform_int_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> uniform_int_distribution<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> uniform_int_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>result_type a<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type b<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os,            <span class='comment'>// hosted</span>
                   <span class='keyword'>const</span> uniform_int_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is,            <span class='comment'>// hosted</span>
                   uniform_int_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:uniform_int_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:uniform_int_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> uniform_int_distribution<span class='parenthesis'>(</span>IntType a, IntType b <span class='operator'>=</span> numeric_limits<span class='anglebracket'>&lt;</span>IntType<span class='anglebracket'>&gt;</span><span class='operator'>::</span>max<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.uni.int-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.uni.int-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4596'>#</a></div><div class='texpara'><div id='dist.uni.int-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'><span class='texttt'>a</span> &ensp;≤&ensp;<span class='texttt'>b</span></span><a class='hidden_link' href='#dist.uni.int-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.uni.int-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.uni.int-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4600'>#</a></div><div class='texpara'><div id='dist.uni.int-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>a</span> and <span class='texttt'>b</span>
 correspond to the respective parameters of the distribution<a class='hidden_link' href='#dist.uni.int-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:uniform_int_distribution,a'><div id='lib:a,uniform_int_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:a,uniform_int_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>result_type a<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.uni.int-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.uni.int-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4612'>#</a></div><div class='texpara'><div id='dist.uni.int-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>a</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.uni.int-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:uniform_int_distribution,b'><div id='lib:b,uniform_int_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:b,uniform_int_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>result_type b<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.uni.int-5'><div class='marginalizedparent'><a class='marginalized' href='#dist.uni.int-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4624'>#</a></div><div class='texpara'><div id='dist.uni.int-5.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>b</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.uni.int-5.sentence-1'>.</a></div></div></div></div></div><div id='dist.uni.real' class='section'><h4 ><a class='secnum' href='#dist.uni.real' style='min-width:110pt'>29.5.9.2.2</a> Class template <span class='texttt'>uniform_<span class='shy'></span>real_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.uni.real'>[rand.dist.uni.real]</a></h4><div class='texpara'><a class='index' id='lib:uniform_real_distribution'></a></div><div class='para' id='dist.uni.real-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.uni.real-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4636'>#</a></div><div class='texpara'><div id='dist.uni.real-1.sentence-1' class='sentence'>A <span class='texttt'>uniform_<span class='shy'></span>real_<span class='shy'></span>distribution</span> random number distribution
produces random numbers <span class='math'><span class='mathalpha'>x</span></span>,
<span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≤</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span></span></span></span>,
distributed according to
the constant probability density function in Formula  <a href='#eq:rand.dist.uni.real'>29.3</a><a class='hidden_link' href='#dist.uni.real-1.sentence-1'>.</a></div> <div class='formula' id='eq:rand.dist.uni.real'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 15.871em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: -0.012em;"><span class="mjx-mlabeledtr" style="height: 1.075em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 9.159em;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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;">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-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -2.556em;"><span class="mjx-label" style="height: 1.075em;"><span id="mjx-eqn-29.3" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.3)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div>
<div id='dist.uni.real-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#dist.uni.real-note-1'>1</a></i>:&ensp;<div id='dist.uni.real-1.sentence-2' class='sentence'>This implies that <span class='math'><span class='mathalpha'>p</span>(<span class='mathalpha'>x</span><span style='white-space:nowrap'>&thinsp;</span>|<span style='white-space:nowrap'>&thinsp;</span><span class='mathalpha'>a</span>,<span class='mathalpha'>b</span>)</span> is undefined when <span class='texttt'>a <span class='operator'>=</span><span class='operator'>=</span> b</span><a class='hidden_link' href='#dist.uni.real-1.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div><div class='texpara'><span id='lib:uniform_real_distribution,result_type'><span id='lib:result_type,uniform_real_distribution'><span id='lib:uniform_real_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:uniform_real_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> uniform_real_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> RealType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructors and reset functions</span>
    <span class="added">constexpr </span>uniform_real_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> uniform_real_distribution<span class='parenthesis'>(</span><span class='literal'>0.0</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> uniform_real_distribution<span class='parenthesis'>(</span>RealType a, RealType b <span class='operator'>=</span> <span class='literal'>1.0</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> uniform_real_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> uniform_real_distribution<span class='operator'>&amp;</span> x,
                           <span class='keyword'>const</span> uniform_real_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>result_type a<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type b<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> uniform_real_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, uniform_real_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:uniform_real_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:uniform_real_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> uniform_real_distribution<span class='parenthesis'>(</span>RealType a, RealType b <span class='operator'>=</span> <span class='literal'>1.0</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.uni.real-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.uni.real-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4702'>#</a></div><div class='texpara'><div id='dist.uni.real-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'><span class='texttt'>a</span> &ensp;≤&ensp;<span class='texttt'>b</span></span>
and
<span class='math'><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;">b</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≤</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></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.519em; padding-bottom: 0.519em;">numeric_limits<span class='anglebracket'>&lt;</span>RealType<span class='anglebracket'>&gt;</span><span class='operator'>::</span>max<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.uni.real-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.uni.real-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.uni.real-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4708'>#</a></div><div class='texpara'><div id='dist.uni.real-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>a</span> and <span class='texttt'>b</span>
 correspond to the respective parameters of the distribution<a class='hidden_link' href='#dist.uni.real-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:uniform_real_distribution,a'><div id='lib:a,uniform_real_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:a,uniform_real_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>result_type a<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.uni.real-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.uni.real-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4720'>#</a></div><div class='texpara'><div id='dist.uni.real-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>a</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.uni.real-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:uniform_real_distribution,b'><div id='lib:b,uniform_real_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:b,uniform_real_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>result_type b<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.uni.real-5'><div class='marginalizedparent'><a class='marginalized' href='#dist.uni.real-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4732'>#</a></div><div class='texpara'><div id='dist.uni.real-5.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>b</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.uni.real-5.sentence-1'>.</a></div></div></div></div><div class='texpara'></div></div></div><div id='dist.bern' class='section'><h4 ><a class='secnum' href='#dist.bern' style='min-width:95pt'>29.5.9.3</a> Bernoulli distributions <a class='abbr_ref' href='rand.dist.bern'>[rand.dist.bern]</a></h4><div class='texpara'><a class='index' id=':Bernoulli_distributions'></a><a class='index' id=':random_number_distributions,Bernoulli'></a></div><div id='dist.bern.bernoulli' class='section'><h4 ><a class='secnum' href='#dist.bern.bernoulli' style='min-width:110pt'>29.5.9.3.1</a> Class <span class='texttt'>bernoulli_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.bern.bernoulli'>[rand.dist.bern.bernoulli]</a></h4><div class='texpara'><a class='index' id='lib:bernoulli_distribution'></a></div><div class='para' id='dist.bern.bernoulli-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.bernoulli-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4757'>#</a></div><div class='texpara'><div id='dist.bern.bernoulli-1.sentence-1' class='sentence'>A <span class='texttt'>bernoulli_<span class='shy'></span>distribution</span> random number distribution
produces <span class='texttt'><span class='keyword'>bool</span></span> values <span class='math'><span class='mathalpha'>b</span></span>
distributed according to
the discrete probability function in Formula  <a href='#eq:rand.dist.bern.bernoulli'>29.4</a><a class='hidden_link' href='#dist.bern.bernoulli-1.sentence-1'>.</a></div> <div class='formula' id='eq:rand.dist.bern.bernoulli'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 20.898em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: 0;"><span class="mjx-mlabeledtr" style="height: 2.449em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 14.186em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mrow MJXc-space3"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">{</span></span><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mtable" style="vertical-align: -0.969em; padding: 0px 0.167em;"><span class="mjx-table"><span class="mjx-mtr" style="height: 1.219em;"><span class="mjx-mtd" style="padding: 0px 0.5em 0px 0px; text-align: left; width: 2.225em;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-strut"></span></span></span><span class="mjx-mtd" style="padding: 0px 0px 0px 0.5em; text-align: left; width: 5.472em;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;"> if </span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</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-texatom MJXc-space3"><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;"><span class='literal'>true</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span><span class="mjx-strut"></span></span></span></span><span class="mjx-mtr" style="height: 1.219em;"><span class="mjx-mtd" style="padding: 0.2em 0.5em 0px 0px; text-align: left;"><span class="mjx-mrow" style="margin-top: -0.2em;"><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-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-strut"></span></span></span><span class="mjx-mtd" style="padding: 0.2em 0px 0px 0.5em; text-align: left;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;"> if </span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</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-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.446em; padding-bottom: 0.298em;"><span class='literal'>false</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span><span class="mjx-strut"></span></span></span></span></span></span></span><span class="mjx-mo" style="width: 0.12em;"></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -2.556em;"><span class="mjx-label" style="height: 2.449em;"><span id="mjx-eqn-29.4" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: 0.475em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.4)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div><div class='texpara'><span id='lib:bernoulli_distribution,result_type'><span id='lib:result_type,bernoulli_distribution'><span id='lib:bernoulli_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:bernoulli_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>class</span> bernoulli_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> <span class='keyword'>bool</span>;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructors and reset functions</span>
    <span class="added">constexpr </span>bernoulli_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> bernoulli_distribution<span class='parenthesis'>(</span><span class='literal'>0.5</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> bernoulli_distribution<span class='parenthesis'>(</span><span class='keyword'>double</span> p<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> bernoulli_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> bernoulli_distribution<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> bernoulli_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span><span class='keyword'>double</span> p<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> bernoulli_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, bernoulli_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:bernoulli_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:bernoulli_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> bernoulli_distribution<span class='parenthesis'>(</span><span class='keyword'>double</span> p<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.bern.bernoulli-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.bernoulli-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4819'>#</a></div><div class='texpara'><div id='dist.bern.bernoulli-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'>0 &ensp;≤&ensp;<span class='texttt'>p</span> &ensp;≤&ensp;1</span><a class='hidden_link' href='#dist.bern.bernoulli-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.bern.bernoulli-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.bernoulli-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4823'>#</a></div><div class='texpara'><div id='dist.bern.bernoulli-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>p</span>
 corresponds to the parameter of the distribution<a class='hidden_link' href='#dist.bern.bernoulli-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:bernoulli_distribution,p'><div id='lib:p,bernoulli_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:p,bernoulli_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>double</span> p<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.bern.bernoulli-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.bernoulli-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4835'>#</a></div><div class='texpara'><div id='dist.bern.bernoulli-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>p</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.bern.bernoulli-4.sentence-1'>.</a></div></div></div></div></div><div id='dist.bern.bin' class='section'><h4 ><a class='secnum' href='#dist.bern.bin' style='min-width:110pt'>29.5.9.3.2</a> Class template <span class='texttt'>binomial_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.bern.bin'>[rand.dist.bern.bin]</a></h4><div class='texpara'><a class='index' id='lib:binomial_distribution'></a></div><div class='para' id='dist.bern.bin-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.bin-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4847'>#</a></div><div class='texpara'><div id='dist.bern.bin-1.sentence-1' class='sentence'>A <span class='texttt'>binomial_<span class='shy'></span>distribution</span> random number distribution
produces integer values <span class='math'><span class='mathalpha'>i</span> &ensp;≥&ensp;0</span>
distributed according to
the discrete probability function in Formula  <a href='#eq:rand.dist.bern.bin'>29.5</a><a class='hidden_link' href='#dist.bern.bin-1.sentence-1'>.</a></div></div><div class='texpara'><div class='formula' id='eq:rand.dist.bern.bin'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 19.988em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: 0;"><span class="mjx-mlabeledtr" style="height: 2.449em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 13.276em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mrow MJXc-space3"><span class="mjx-TeXmathchoice"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">(</span></span></span></span></span><span class="mjx-mfrac"><span class="mjx-box MJXc-stacked" style="width: 0.361em;"><span class="mjx-numerator" style="width: 0.361em; top: -1.328em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span><span class="mjx-denominator" style="width: 0.361em; bottom: -0.722em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span style="height: 2.049em; vertical-align: -0.722em;" class="mjx-vsize"></span></span><span class="mjx-TeXmathchoice"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">)</span></span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.584em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><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-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-msubsup"><span class="mjx-base"><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 class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.584em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -2.556em;"><span class="mjx-label" style="height: 2.449em;"><span id="mjx-eqn-29.5" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: 0.475em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.5)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div><div class='texpara'><span id='lib:binomial_distribution,result_type'><span id='lib:result_type,binomial_distribution'><span id='lib:binomial_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:binomial_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> IntType <span class='operator'>=</span> <span class='keyword'>int</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> binomial_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> IntType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructors and reset functions</span>
    <span class="added">constexpr </span>binomial_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> binomial_distribution<span class='parenthesis'>(</span><span class='literal'>1</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> binomial_distribution<span class='parenthesis'>(</span>IntType t, <span class='keyword'>double</span> p <span class='operator'>=</span> <span class='literal'>0.5</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> binomial_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> binomial_distribution<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> binomial_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>IntType t<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>double</span> p<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> binomial_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, binomial_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:binomial_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:binomial_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> binomial_distribution<span class='parenthesis'>(</span>IntType t, <span class='keyword'>double</span> p <span class='operator'>=</span> <span class='literal'>0.5</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.bern.bin-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.bin-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4909'>#</a></div><div class='texpara'><div id='dist.bern.bin-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'>0 &ensp;≤&ensp;<span class='texttt'>p</span> &ensp;≤&ensp;1</span> and <span class='math'>0 &ensp;≤&ensp;<span class='texttt'>t</span></span><a class='hidden_link' href='#dist.bern.bin-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.bern.bin-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.bin-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4913'>#</a></div><div class='texpara'><div id='dist.bern.bin-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>t</span> and <span class='texttt'>p</span>
 correspond to the respective parameters of the distribution<a class='hidden_link' href='#dist.bern.bin-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:binomial_distribution,t'><div id='lib:t,binomial_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:t,binomial_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>IntType t<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.bern.bin-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.bin-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4924'>#</a></div><div class='texpara'><div id='dist.bern.bin-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>t</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.bern.bin-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:binomial_distribution,p'><div id='lib:p,binomial_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:p,binomial_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>double</span> p<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.bern.bin-5'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.bin-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4936'>#</a></div><div class='texpara'><div id='dist.bern.bin-5.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>p</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.bern.bin-5.sentence-1'>.</a></div></div></div></div></div><div id='dist.bern.geo' class='section'><h4 ><a class='secnum' href='#dist.bern.geo' style='min-width:110pt'>29.5.9.3.3</a> Class template <span class='texttt'>geometric_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.bern.geo'>[rand.dist.bern.geo]</a></h4><div class='texpara'><a class='index' id='lib:geometric_distribution'></a></div><div class='para' id='dist.bern.geo-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.geo-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L4948'>#</a></div><div class='texpara'><div id='dist.bern.geo-1.sentence-1' class='sentence'>A <span class='texttt'>geometric_<span class='shy'></span>distribution</span> random number distribution
produces integer values <span class='math'><span class='mathalpha'>i</span> &ensp;≥&ensp;0</span>
distributed according to
the discrete probability function in Formula  <a href='#eq:rand.dist.bern.geo'>29.6</a><a class='hidden_link' href='#dist.bern.geo-1.sentence-1'>.</a></div> <div class='formula' id='eq:rand.dist.bern.geo'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 15.542em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: -0.061em;"><span class="mjx-mlabeledtr" style="height: 1.173em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 8.83em;"><span class="mjx-mrow" style="margin-top: -0.102em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><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-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-msubsup"><span class="mjx-base"><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 class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.584em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -2.556em;"><span class="mjx-label" style="height: 1.173em;"><span id="mjx-eqn-29.6" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: -0.102em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.6)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div><div class='texpara'><span id='lib:geometric_distribution,result_type'><span id='lib:result_type,geometric_distribution'><span id='lib:geometric_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:geometric_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> IntType <span class='operator'>=</span> <span class='keyword'>int</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> geometric_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> IntType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructors and reset functions</span>
    <span class="added">constexpr </span>geometric_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> geometric_distribution<span class='parenthesis'>(</span><span class='literal'>0.5</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> geometric_distribution<span class='parenthesis'>(</span><span class='keyword'>double</span> p<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> geometric_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> geometric_distribution<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> geometric_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span><span class='keyword'>double</span> p<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> geometric_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, geometric_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:geometric_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:geometric_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> geometric_distribution<span class='parenthesis'>(</span><span class='keyword'>double</span> p<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.bern.geo-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.geo-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5008'>#</a></div><div class='texpara'><div id='dist.bern.geo-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><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;">p</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</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;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.bern.geo-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.bern.geo-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.geo-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5012'>#</a></div><div class='texpara'><div id='dist.bern.geo-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>p</span>
 corresponds to the parameter of the distribution<a class='hidden_link' href='#dist.bern.geo-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:geometric_distribution,p'><div id='lib:p,geometric_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:p,geometric_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>double</span> p<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.bern.geo-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.geo-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5024'>#</a></div><div class='texpara'><div id='dist.bern.geo-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>p</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.bern.geo-4.sentence-1'>.</a></div></div></div></div></div><div id='dist.bern.negbin' class='section'><h4 ><a class='secnum' href='#dist.bern.negbin' style='min-width:110pt'>29.5.9.3.4</a> Class template <span class='texttt'>negative_<span class='shy'></span>binomial_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.bern.negbin'>[rand.dist.bern.negbin]</a></h4><div class='texpara'><a class='index' id='lib:negative_binomial_distribution'></a></div><div class='para' id='dist.bern.negbin-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.negbin-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5037'>#</a></div><div class='texpara'><div id='dist.bern.negbin-1.sentence-1' class='sentence'>A <span class='texttt'>negative_<span class='shy'></span>binomial_<span class='shy'></span>distribution</span> random number distribution
produces random integers <span class='math'><span class='mathalpha'>i</span> &ensp;≥&ensp;0</span>
distributed according to
the discrete probability function in Formula  <a href='#eq:rand.dist.bern.negbin'>29.7</a><a class='hidden_link' href='#dist.bern.negbin-1.sentence-1'>.</a></div> <div class='formula' id='eq:rand.dist.bern.negbin'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 22.917em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: 0;"><span class="mjx-mlabeledtr" style="height: 2.449em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 16.205em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mrow MJXc-space3"><span class="mjx-TeXmathchoice"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">(</span></span></span></span></span><span class="mjx-mfrac"><span class="mjx-box MJXc-stacked" style="width: 3.811em;"><span class="mjx-numerator" style="width: 3.811em; top: -1.396em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span><span class="mjx-denominator" style="width: 3.811em; bottom: -0.722em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span style="height: 2.117em; vertical-align: -0.722em;" class="mjx-vsize"></span></span><span class="mjx-TeXmathchoice"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">)</span></span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.584em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><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-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-msubsup"><span class="mjx-base"><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 class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.584em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -2.556em;"><span class="mjx-label" style="height: 2.449em;"><span id="mjx-eqn-29.7" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: 0.475em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.7)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div>
<div id='dist.bern.negbin-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#dist.bern.negbin-note-1'>1</a></i>:&ensp;<div id='dist.bern.negbin-1.sentence-2' class='sentence'>This implies that <span class='math'><span class='mathalpha'>P</span>(<span class='mathalpha'>i</span><span style='white-space:nowrap'>&thinsp;</span>|<span style='white-space:nowrap'>&thinsp;</span><span class='mathalpha'>k</span>,<span class='mathalpha'>p</span>)</span> is undefined when <span class='texttt'>p <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>1</span></span><a class='hidden_link' href='#dist.bern.negbin-1.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div><div class='texpara'><span id='lib:negative_binomial_distribution,result_type'><span id='lib:result_type,negative_binomial_distribution'><span id='lib:negative_binomial_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:negative_binomial_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> IntType <span class='operator'>=</span> <span class='keyword'>int</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> negative_binomial_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> IntType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructor and reset functions</span>
    <span class="added">constexpr </span>negative_binomial_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> negative_binomial_distribution<span class='parenthesis'>(</span><span class='literal'>1</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> negative_binomial_distribution<span class='parenthesis'>(</span>IntType k, <span class='keyword'>double</span> p <span class='operator'>=</span> <span class='literal'>0.5</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> negative_binomial_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> negative_binomial_distribution<span class='operator'>&amp;</span> x,
                           <span class='keyword'>const</span> negative_binomial_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>IntType k<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>double</span> p<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> negative_binomial_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, negative_binomial_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:negative_binomial_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:negative_binomial_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> negative_binomial_distribution<span class='parenthesis'>(</span>IntType k, <span class='keyword'>double</span> p <span class='operator'>=</span> <span class='literal'>0.5</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.bern.negbin-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.negbin-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5102'>#</a></div><div class='texpara'><div id='dist.bern.negbin-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><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;">p</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≤</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><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></span></span></span>
and <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><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;">k</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.bern.negbin-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.bern.negbin-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.negbin-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5107'>#</a></div><div class='texpara'><div id='dist.bern.negbin-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>k</span> and <span class='texttt'>p</span>
 correspond to the respective parameters of the distribution<a class='hidden_link' href='#dist.bern.negbin-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:negative_binomial_distribution,k'><div id='lib:k,negative_binomial_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:k,negative_binomial_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>IntType k<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.bern.negbin-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.negbin-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5119'>#</a></div><div class='texpara'><div id='dist.bern.negbin-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>k</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.bern.negbin-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:negative_binomial_distribution,p'><div id='lib:p,negative_binomial_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:p,negative_binomial_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>double</span> p<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.bern.negbin-5'><div class='marginalizedparent'><a class='marginalized' href='#dist.bern.negbin-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5131'>#</a></div><div class='texpara'><div id='dist.bern.negbin-5.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>p</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.bern.negbin-5.sentence-1'>.</a></div></div></div></div><div class='texpara'></div></div></div><div id='dist.pois' class='section'><h4 ><a class='secnum' href='#dist.pois' style='min-width:95pt'>29.5.9.4</a> Poisson distributions <a class='abbr_ref' href='rand.dist.pois'>[rand.dist.pois]</a></h4><div class='texpara'><a class='index' id=':Poisson_distributions'></a><a class='index' id=':random_number_distributions,Poisson'></a></div><div id='dist.pois.poisson' class='section'><h4 ><a class='secnum' href='#dist.pois.poisson' style='min-width:110pt'>29.5.9.4.1</a> Class template <span class='texttt'>poisson_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.pois.poisson'>[rand.dist.pois.poisson]</a></h4><div class='texpara'><a class='index' id='lib:poisson_distribution'></a></div><div class='para' id='dist.pois.poisson-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.poisson-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5156'>#</a></div><div class='texpara'><div id='dist.pois.poisson-1.sentence-1' class='sentence'>A <span class='texttt'>poisson_<span class='shy'></span>distribution</span> random number distribution
produces integer values <span class='math'><span class='mathalpha'>i</span> &ensp;≥&ensp;0</span>
distributed according to
the discrete probability function in Formula  <a href='#eq:rand.dist.pois.poisson'>29.8</a><a class='hidden_link' href='#dist.pois.poisson-1.sentence-1'>.</a></div> <div id='dist.pois.poisson-1.sentence-2' class='sentence'><div class='formula' id='eq:rand.dist.pois.poisson'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 13.934em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: -0.156em;"><span class="mjx-mlabeledtr" style="height: 2.446em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 7.222em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">μ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mfrac MJXc-space3"><span class="mjx-box MJXc-stacked" style="width: 2.56em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 2.56em; top: -1.629em;"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">e</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-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">μ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">μ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span><span class="mjx-denominator" style="width: 2.56em; bottom: -0.817em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;">!</span></span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 2.56em;" class="mjx-line"></span></span><span style="height: 2.446em; vertical-align: -0.817em;" class="mjx-vsize"></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -2.556em;"><span class="mjx-label" style="height: 2.446em;"><span id="mjx-eqn-29.8" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: 0.629em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.8)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div>
The distribution parameter <span class='math'>μ</span>
is also known as this distribution's <a class='hidden_link' href='#def:mean' id='def:mean'><i>mean</i></a><a class='hidden_link' href='#dist.pois.poisson-1.sentence-2'>.</a></div></div><div class='texpara'><span id='lib:poisson_distribution,result_type'><span id='lib:result_type,poisson_distribution'><span id='lib:poisson_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:poisson_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> IntType <span class='operator'>=</span> <span class='keyword'>int</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> poisson_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> IntType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructors and reset functions</span>
    <span class="added">constexpr </span>poisson_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> poisson_distribution<span class='parenthesis'>(</span><span class='literal'>1.0</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> poisson_distribution<span class='parenthesis'>(</span><span class='keyword'>double</span> mean<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> poisson_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> poisson_distribution<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> poisson_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span><span class='keyword'>double</span> mean<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> poisson_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, poisson_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:poisson_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:poisson_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> poisson_distribution<span class='parenthesis'>(</span><span class='keyword'>double</span> mean<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.pois.poisson-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.poisson-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5217'>#</a></div><div class='texpara'><div id='dist.pois.poisson-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">mean</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.pois.poisson-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.pois.poisson-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.poisson-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5221'>#</a></div><div class='texpara'><div id='dist.pois.poisson-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>mean</span> corresponds to the parameter of the distribution<a class='hidden_link' href='#dist.pois.poisson-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:poisson_distribution,mean'><div id='lib:mean,poisson_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mean,poisson_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>double</span> mean<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.pois.poisson-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.poisson-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5232'>#</a></div><div class='texpara'><div id='dist.pois.poisson-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>mean</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.pois.poisson-4.sentence-1'>.</a></div></div></div></div></div><div id='dist.pois.exp' class='section'><h4 ><a class='secnum' href='#dist.pois.exp' style='min-width:110pt'>29.5.9.4.2</a> Class template <span class='texttt'>exponential_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.pois.exp'>[rand.dist.pois.exp]</a></h4><div class='texpara'><a class='index' id='lib:exponential_distribution'></a></div><div class='para' id='dist.pois.exp-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.exp-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5244'>#</a></div><div class='texpara'><div id='dist.pois.exp-1.sentence-1' class='sentence'>An <span class='texttt'>exponential_<span class='shy'></span>distribution</span> random number distribution
produces random numbers <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&gt;</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;">0</span></span></span></span></span></span>
distributed according to
the probability density function in Formula  <a href='#eq:rand.dist.pois.exp'>29.9</a><a class='hidden_link' href='#dist.pois.exp-1.sentence-1'>.</a></div> <div class='formula' id='eq:rand.dist.pois.exp'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 13.544em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: -0.073em;"><span class="mjx-mlabeledtr" style="height: 1.196em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 6.832em;"><span class="mjx-mrow" style="margin-top: -0.079em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">λ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">λ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">e</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.584em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">λ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span></span></span></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -2.556em;"><span class="mjx-label" style="height: 1.196em;"><span id="mjx-eqn-29.9" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: -0.079em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.9)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div><div class='texpara'><span id='lib:exponential_distribution,result_type'><span id='lib:result_type,exponential_distribution'><span id='lib:exponential_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:exponential_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> exponential_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> RealType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructors and reset functions</span>
    <span class="added">constexpr </span>exponential_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> exponential_distribution<span class='parenthesis'>(</span><span class='literal'>1.0</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> exponential_distribution<span class='parenthesis'>(</span>RealType lambda<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> exponential_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> exponential_distribution<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> exponential_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>RealType lambda<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> exponential_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, exponential_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:exponential_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:exponential_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> exponential_distribution<span class='parenthesis'>(</span>RealType lambda<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.pois.exp-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.exp-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5304'>#</a></div><div class='texpara'><div id='dist.pois.exp-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><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;">lambda</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.pois.exp-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.pois.exp-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.exp-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5308'>#</a></div><div class='texpara'><div id='dist.pois.exp-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>lambda</span> corresponds to the parameter of the distribution<a class='hidden_link' href='#dist.pois.exp-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:exponential_distribution,lambda'><div id='lib:lambda,exponential_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:lambda,exponential_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType lambda<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.pois.exp-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.exp-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5319'>#</a></div><div class='texpara'><div id='dist.pois.exp-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>lambda</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.pois.exp-4.sentence-1'>.</a></div></div></div></div></div><div id='dist.pois.gamma' class='section'><h4 ><a class='secnum' href='#dist.pois.gamma' style='min-width:110pt'>29.5.9.4.3</a> Class template <span class='texttt'>gamma_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.pois.gamma'>[rand.dist.pois.gamma]</a></h4><div class='texpara'><a class='index' id='lib:gamma_distribution'></a></div><div class='para' id='dist.pois.gamma-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.gamma-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5331'>#</a></div><div class='texpara'><div id='dist.pois.gamma-1.sentence-1' class='sentence'>A <span class='texttt'>gamma_<span class='shy'></span>distribution</span> random number distribution
produces random numbers <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&gt;</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;">0</span></span></span></span></span></span>
distributed according to
the probability density function in Formula  <a href='#eq:rand.dist.pois.gamma'>29.10</a><a class='hidden_link' href='#dist.pois.gamma-1.sentence-1'>.</a></div> <div class='formula' id='eq:rand.dist.pois.gamma'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 20.62em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: 0.001em;"><span class="mjx-mlabeledtr" style="height: 2.678em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 12.908em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">α</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.446em; padding-right: 0.007em;">β</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mfrac MJXc-space3"><span class="mjx-box MJXc-stacked" style="width: 4.026em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 4.026em; top: -1.587em;"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">e</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-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.446em; padding-right: 0.007em;">β</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span></span><span class="mjx-denominator" style="width: 4.026em; bottom: -1.09em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.446em; padding-right: 0.007em;">β</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.409em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">α</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">Γ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">α</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><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 style="border-bottom: 1.3px solid; top: -0.296em; width: 4.026em;" class="mjx-line"></span></span><span style="height: 2.678em; vertical-align: -1.09em;" class="mjx-vsize"></span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.584em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mspace" style="font-size: 141.4%; width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">α</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -3.056em;"><span class="mjx-label" style="height: 2.678em;"><span id="mjx-eqn-29.10" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: 0.587em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.10)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div><div class='texpara'><span id='lib:gamma_distribution__'><span id='lib:gamma_distribution,result_type'><span id='lib:result_type,gamma_distribution'><span id='lib:gamma_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:gamma_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> gamma_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> RealType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructors and reset functions</span>
    <span class="added">constexpr </span>gamma_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> gamma_distribution<span class='parenthesis'>(</span><span class='literal'>1.0</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> gamma_distribution<span class='parenthesis'>(</span>RealType alpha, RealType beta <span class='operator'>=</span> <span class='literal'>1.0</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> gamma_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> gamma_distribution<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> gamma_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>RealType alpha<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>RealType beta<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> gamma_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, gamma_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></span></div></div><div class='texpara'><div id='lib:gamma_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:gamma_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> gamma_distribution<span class='parenthesis'>(</span>RealType alpha, RealType beta <span class='operator'>=</span> <span class='literal'>1.0</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.pois.gamma-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.gamma-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5393'>#</a></div><div class='texpara'><div id='dist.pois.gamma-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">alpha</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span> and <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><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;">beta</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.pois.gamma-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.pois.gamma-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.gamma-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5397'>#</a></div><div class='texpara'><div id='dist.pois.gamma-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>alpha</span> and <span class='texttt'>beta</span>
correspond to the parameters of the distribution<a class='hidden_link' href='#dist.pois.gamma-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:gamma_distribution,alpha'><div id='lib:alpha,gamma_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:alpha,gamma_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType alpha<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.pois.gamma-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.gamma-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5409'>#</a></div><div class='texpara'><div id='dist.pois.gamma-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>alpha</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.pois.gamma-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:gamma_distribution,beta'><div id='lib:beta,gamma_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:beta,gamma_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType beta<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.pois.gamma-5'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.gamma-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5421'>#</a></div><div class='texpara'><div id='dist.pois.gamma-5.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>beta</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.pois.gamma-5.sentence-1'>.</a></div></div></div></div></div><div id='dist.pois.weibull' class='section'><h4 ><a class='secnum' href='#dist.pois.weibull' style='min-width:110pt'>29.5.9.4.4</a> Class template <span class='texttt'>weibull_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.pois.weibull'>[rand.dist.pois.weibull]</a></h4><div class='texpara'><a class='index' id='lib:weibull_distribution'></a></div><div class='para' id='dist.pois.weibull-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.weibull-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5434'>#</a></div><div class='texpara'><div id='dist.pois.weibull-1.sentence-1' class='sentence'>A <span class='texttt'>weibull_<span class='shy'></span>distribution</span> random number distribution
produces random numbers <span class='math'><span class='mathalpha'>x</span> &ensp;≥&ensp;0</span>
distributed according to
the probability density function in Formula  <a href='#eq:rand.dist.pois.weibull'>29.11</a><a class='hidden_link' href='#dist.pois.weibull-1.sentence-1'>.</a></div> <div class='formula' id='eq:rand.dist.pois.weibull'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 26.462em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: -0.108em;"><span class="mjx-mlabeledtr" style="height: 2.665em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 18.75em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mfrac MJXc-space3"><span class="mjx-box MJXc-stacked" style="width: 0.729em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 0.729em; top: -1.143em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span></span><span class="mjx-denominator" style="width: 0.729em; bottom: -0.795em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 0.729em;" class="mjx-line"></span></span><span style="height: 1.938em; vertical-align: -0.795em;" class="mjx-vsize"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">(</span></span><span class="mjx-mfrac"><span class="mjx-box MJXc-stacked" style="width: 0.772em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 0.772em; top: -1.144em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span></span><span class="mjx-denominator" style="width: 0.772em; bottom: -0.795em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 0.772em;" class="mjx-line"></span></span><span style="height: 1.939em; vertical-align: -0.795em;" class="mjx-vsize"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">)</span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 1.7em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.519em;">exp</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mrow MJXc-space1"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">(</span></span><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">(</span></span><span class="mjx-mfrac"><span class="mjx-box MJXc-stacked" style="width: 0.772em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 0.772em; top: -1.144em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span></span><span class="mjx-denominator" style="width: 0.772em; bottom: -0.795em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 0.772em;" class="mjx-line"></span></span><span style="height: 1.939em; vertical-align: -0.795em;" class="mjx-vsize"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">)</span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 1.7em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">)</span></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -3.056em;"><span class="mjx-label" style="height: 2.665em;"><span id="mjx-eqn-29.11" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: 0.691em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.11)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div><div class='texpara'><span id='lib:weibull_distribution,result_type'><span id='lib:result_type,weibull_distribution'><span id='lib:weibull_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:weibull_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> weibull_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> RealType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructor and reset functions</span>
    <span class="added">constexpr </span>weibull_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> weibull_distribution<span class='parenthesis'>(</span><span class='literal'>1.0</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> weibull_distribution<span class='parenthesis'>(</span>RealType a, RealType b <span class='operator'>=</span> <span class='literal'>1.0</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> weibull_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> weibull_distribution<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> weibull_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>RealType a<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>RealType b<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> weibull_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, weibull_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:weibull_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:weibull_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> weibull_distribution<span class='parenthesis'>(</span>RealType a, RealType b <span class='operator'>=</span> <span class='literal'>1.0</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.pois.weibull-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.weibull-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5496'>#</a></div><div class='texpara'><div id='dist.pois.weibull-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span> and <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><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;">b</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.pois.weibull-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.pois.weibull-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.weibull-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5500'>#</a></div><div class='texpara'><div id='dist.pois.weibull-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>a</span> and <span class='texttt'>b</span>
correspond to the respective parameters of the distribution<a class='hidden_link' href='#dist.pois.weibull-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:weibull_distribution,a'><div id='lib:a,weibull_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:a,weibull_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType a<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.pois.weibull-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.weibull-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5512'>#</a></div><div class='texpara'><div id='dist.pois.weibull-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>a</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.pois.weibull-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:weibull_distribution,b'><div id='lib:b,weibull_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:b,weibull_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType b<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.pois.weibull-5'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.weibull-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5524'>#</a></div><div class='texpara'><div id='dist.pois.weibull-5.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>b</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.pois.weibull-5.sentence-1'>.</a></div></div></div></div></div><div id='dist.pois.extreme' class='section'><h4 ><a class='secnum' href='#dist.pois.extreme' style='min-width:110pt'>29.5.9.4.5</a> Class template <span class='texttt'>extreme_<span class='shy'></span>value_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.pois.extreme'>[rand.dist.pois.extreme]</a></h4><div class='texpara'><a class='index' id='lib:extreme_value_distribution'></a></div><div class='para' id='dist.pois.extreme-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.extreme-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5537'>#</a></div><div class='texpara'><div id='dist.pois.extreme-1.sentence-1' class='sentence'>An <span class='texttt'>extreme_<span class='shy'></span>value_<span class='shy'></span>distribution</span> random number distribution
produces random numbers <span class='math'><span class='mathalpha'>x</span></span>
distributed according to
the probability density function in Formula  <a href='#eq:rand.dist.pois.extreme'>29.12</a><a class='hidden_link' href='#dist.pois.extreme-1.sentence-1'>.</a><a class='footnoteref' href='#footnote-247' id='footnoteref-247' title='The distribution corresponding to this probability density function is also known (with a possible change of variable) as the Gumbel Type I, the log-Weibull, or the Fisher-Tippett Type I distribution.'>247</a></div> <div class='formula' id='eq:rand.dist.pois.extreme'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 28.158em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: 0;"><span class="mjx-mlabeledtr" style="height: 2.449em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 20.446em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mfrac MJXc-space3"><span class="mjx-box MJXc-stacked" style="width: 0.7em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 0.7em; top: -1.368em;"><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><span class="mjx-denominator" style="width: 0.7em; bottom: -0.795em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 0.7em;" class="mjx-line"></span></span><span style="height: 2.163em; vertical-align: -0.795em;" class="mjx-vsize"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.519em;">exp</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mrow MJXc-space1"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">(</span></span><span class="mjx-mrow"><span class="mjx-mfrac"><span class="mjx-box MJXc-stacked" style="width: 2.523em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 2.523em; top: -1.285em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span></span></span><span class="mjx-denominator" style="width: 2.523em; bottom: -0.795em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 2.523em;" class="mjx-line"></span></span><span style="height: 2.08em; vertical-align: -0.795em;" class="mjx-vsize"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.519em;">exp</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mrow MJXc-space1"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">(</span></span><span class="mjx-mfrac"><span class="mjx-box MJXc-stacked" style="width: 2.523em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 2.523em; top: -1.285em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span></span></span><span class="mjx-denominator" style="width: 2.523em; bottom: -0.795em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 2.523em;" class="mjx-line"></span></span><span style="height: 2.08em; vertical-align: -0.795em;" class="mjx-vsize"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">)</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">)</span></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -3.056em;"><span class="mjx-label" style="height: 2.449em;"><span id="mjx-eqn-29.12" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: 0.475em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.12)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div><div class='texpara'><span id='lib:extreme_value_distribution,result_type'><span id='lib:result_type,extreme_value_distribution'><span id='lib:extreme_value_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:extreme_value_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> extreme_value_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> RealType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructor and reset functions</span>
    <span class="added">constexpr </span>extreme_value_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> extreme_value_distribution<span class='parenthesis'>(</span><span class='literal'>0.0</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> extreme_value_distribution<span class='parenthesis'>(</span>RealType a, RealType b <span class='operator'>=</span> <span class='literal'>1.0</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> extreme_value_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> extreme_value_distribution<span class='operator'>&amp;</span> x,
                           <span class='keyword'>const</span> extreme_value_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>RealType a<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>RealType b<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> extreme_value_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, extreme_value_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:extreme_value_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:extreme_value_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> extreme_value_distribution<span class='parenthesis'>(</span>RealType a, RealType b <span class='operator'>=</span> <span class='literal'>1.0</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.pois.extreme-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.extreme-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5609'>#</a></div><div class='texpara'><div id='dist.pois.extreme-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><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;">b</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.pois.extreme-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.pois.extreme-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.extreme-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5613'>#</a></div><div class='texpara'><div id='dist.pois.extreme-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>a</span> and <span class='texttt'>b</span>
correspond to the respective parameters of the distribution<a class='hidden_link' href='#dist.pois.extreme-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:extreme_value_distribution,a'><div id='lib:a,extreme_value_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:a,extreme_value_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType a<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.pois.extreme-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.extreme-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5625'>#</a></div><div class='texpara'><div id='dist.pois.extreme-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>a</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.pois.extreme-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:extreme_value_distribution,b'><div id='lib:b,extreme_value_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:b,extreme_value_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType b<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.pois.extreme-5'><div class='marginalizedparent'><a class='marginalized' href='#dist.pois.extreme-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5637'>#</a></div><div class='texpara'><div id='dist.pois.extreme-5.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>b</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.pois.extreme-5.sentence-1'>.</a></div></div></div></div><div class='texpara'></div><div class='footnoteSeparator'></div><div class='footnote' id='footnote-247'><div class='texpara'><a class='footnotenum' href='#footnote-247'>247)</a><a class='footnoteBacklink' href='#footnoteref-247'>247)</a> <div id='footnote-247.sentence-1' class='sentence'>The distribution corresponding to
 this probability density function
 is also known
 (with a possible change of variable)
 as the Gumbel Type I,
 the log-Weibull,
 or the Fisher-Tippett Type I
 distribution<a class='hidden_link' href='#footnote-247.sentence-1'>.</a></div></div></div></div></div><div id='dist.norm' class='section'><h4 ><a class='secnum' href='#dist.norm' style='min-width:95pt'>29.5.9.5</a> Normal distributions <a class='abbr_ref' href='rand.dist.norm'>[rand.dist.norm]</a></h4><div class='texpara'><a class='index' id=':normal_distributions'></a><a class='index' id=':random_number_distributions,normal'></a></div><div id='dist.norm.normal' class='section'><h4 ><a class='secnum' href='#dist.norm.normal' style='min-width:110pt'>29.5.9.5.1</a> Class template <span class='texttt'>normal_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.norm.normal'>[rand.dist.norm.normal]</a></h4><div class='texpara'><a class='index' id='lib:normal_distribution'></a></div><div class='para' id='dist.norm.normal-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.normal-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5662'>#</a></div><div class='texpara'><div id='dist.norm.normal-1.sentence-1' class='sentence'>A <span class='texttt'>normal_<span class='shy'></span>distribution</span> random number distribution
produces random numbers <span class='math'><span class='mathalpha'>x</span></span>
distributed according to
the probability density function in Formula  <a href='#eq:rand.dist.norm.normal'>29.13</a><a class='hidden_link' href='#dist.norm.normal-1.sentence-1'>.</a></div> <div id='dist.norm.normal-1.sentence-2' class='sentence'><div class='formula' id='eq:rand.dist.norm.normal'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 25.164em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: 0;"><span class="mjx-mlabeledtr" style="height: 3.049em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 17.452em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">μ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.001em;">σ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mfrac MJXc-space3"><span class="mjx-box MJXc-stacked" style="width: 2.678em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 2.678em; top: -1.368em;"><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><span class="mjx-denominator" style="width: 2.678em; bottom: -1.15em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.001em;">σ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-msqrt"><span class="mjx-box" style="padding-top: 0.045em;"><span class="mjx-surd"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">√</span></span><span class="mjx-box" style="padding-top: 0.124em; border-top: 1px solid;"><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;">2</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">π</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 2.678em;" class="mjx-line"></span></span><span style="height: 2.518em; vertical-align: -1.15em;" class="mjx-vsize"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.519em;">exp</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size4-R" style="padding-top: 1.551em; padding-bottom: 1.551em;">(</span></span><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mfrac"><span class="mjx-box MJXc-stacked" style="width: 3.764em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 3.764em; top: -1.667em;"><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 class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">μ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><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 class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.513em; 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;">2</span></span></span></span></span></span><span class="mjx-denominator" style="width: 3.764em; bottom: -0.854em;"><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;">2</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.001em;">σ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.409em; 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;">2</span></span></span></span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 3.764em;" class="mjx-line"></span></span><span style="height: 2.52em; vertical-align: -0.854em;" class="mjx-vsize"></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size4-R" style="padding-top: 1.551em; padding-bottom: 1.551em;">)</span></span></span></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -3.056em;"><span class="mjx-label" style="height: 3.049em;"><span id="mjx-eqn-29.13" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: 0.775em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.13)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div>
The distribution parameters <span class='math'>μ</span> and <span class='math'>σ</span>
are also known as this distribution's <a class='hidden_link' href='#def:mean' id='def:mean'><i>mean</i></a>
and <a class='hidden_link' href='#def:standard_deviation' id='def:standard_deviation'><i>standard deviation</i></a><a class='hidden_link' href='#dist.norm.normal-1.sentence-2'>.</a></div></div><div class='texpara'><span id='lib:normal_distribution,result_type'><span id='lib:result_type,normal_distribution'><span id='lib:normal_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:normal_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> normal_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> RealType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructors and reset functions</span>
    <span class="added">constexpr </span>normal_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> normal_distribution<span class='parenthesis'>(</span><span class='literal'>0.0</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> normal_distribution<span class='parenthesis'>(</span>RealType mean, RealType stddev <span class='operator'>=</span> <span class='literal'>1.0</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> normal_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> normal_distribution<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> normal_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>RealType mean<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>RealType stddev<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> normal_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, normal_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:normal_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:normal_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> normal_distribution<span class='parenthesis'>(</span>RealType mean, RealType stddev <span class='operator'>=</span> <span class='literal'>1.0</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.norm.normal-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.normal-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5732'>#</a></div><div class='texpara'><div id='dist.norm.normal-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><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;">stddev</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.norm.normal-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.norm.normal-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.normal-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5736'>#</a></div><div class='texpara'><div id='dist.norm.normal-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>mean</span> and <span class='texttt'>stddev</span>
correspond to the respective parameters of the distribution<a class='hidden_link' href='#dist.norm.normal-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:normal_distribution,mean'><div id='lib:mean,normal_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mean,normal_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType mean<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.norm.normal-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.normal-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5748'>#</a></div><div class='texpara'><div id='dist.norm.normal-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>mean</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.norm.normal-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:normal_distribution,stddev'><div id='lib:stddev,normal_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:stddev,normal_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType stddev<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.norm.normal-5'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.normal-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5760'>#</a></div><div class='texpara'><div id='dist.norm.normal-5.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>stddev</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.norm.normal-5.sentence-1'>.</a></div></div></div></div></div><div id='dist.norm.lognormal' class='section'><h4 ><a class='secnum' href='#dist.norm.lognormal' style='min-width:110pt'>29.5.9.5.2</a> Class template <span class='texttt'>lognormal_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.norm.lognormal'>[rand.dist.norm.lognormal]</a></h4><div class='texpara'><a class='index' id='lib:lognormal_distribution'></a></div><div class='para' id='dist.norm.lognormal-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.lognormal-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5773'>#</a></div><div class='texpara'><div id='dist.norm.lognormal-1.sentence-1' class='sentence'>A <span class='texttt'>lognormal_<span class='shy'></span>distribution</span> random number distribution
produces random numbers <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&gt;</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;">0</span></span></span></span></span></span>
distributed according to
the probability density function in Formula  <a href='#eq:rand.dist.norm.lognormal'>29.14</a><a class='hidden_link' href='#dist.norm.lognormal-1.sentence-1'>.</a></div> <div class='formula' id='eq:rand.dist.norm.lognormal'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 26.914em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: 0;"><span class="mjx-mlabeledtr" style="height: 3.049em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 19.202em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mfrac MJXc-space3"><span class="mjx-box MJXc-stacked" style="width: 3.147em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 3.147em; top: -1.368em;"><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><span class="mjx-denominator" style="width: 3.147em; bottom: -1.15em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-msqrt"><span class="mjx-box" style="padding-top: 0.045em;"><span class="mjx-surd"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">√</span></span><span class="mjx-box" style="padding-top: 0.124em; border-top: 1px solid;"><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;">2</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">π</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 3.147em;" class="mjx-line"></span></span><span style="height: 2.518em; vertical-align: -1.15em;" class="mjx-vsize"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.519em;">exp</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size4-R" style="padding-top: 1.551em; padding-bottom: 1.551em;">(</span></span><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mfrac"><span class="mjx-box MJXc-stacked" style="width: 5.04em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 5.04em; top: -1.667em;"><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 class="mjx-mi"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">ln</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span><span class="mjx-msubsup"><span class="mjx-base"><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 class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.513em; 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;">2</span></span></span></span></span></span><span class="mjx-denominator" style="width: 5.04em; bottom: -0.853em;"><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;">2</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.409em; 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;">2</span></span></span></span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 5.04em;" class="mjx-line"></span></span><span style="height: 2.519em; vertical-align: -0.853em;" class="mjx-vsize"></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size4-R" style="padding-top: 1.551em; padding-bottom: 1.551em;">)</span></span></span></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -3.056em;"><span class="mjx-label" style="height: 3.049em;"><span id="mjx-eqn-29.14" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: 0.775em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.14)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div><div class='texpara'><span id='lib:lognormal_distribution,result_type'><span id='lib:result_type,lognormal_distribution'><span id='lib:lognormal_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:lognormal_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> lognormal_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> RealType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructor and reset functions</span>
    <span class="added">constexpr </span>lognormal_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> lognormal_distribution<span class='parenthesis'>(</span><span class='literal'>0.0</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> lognormal_distribution<span class='parenthesis'>(</span>RealType m, RealType s <span class='operator'>=</span> <span class='literal'>1.0</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> lognormal_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> lognormal_distribution<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> lognormal_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>RealType m<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>RealType s<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> lognormal_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, lognormal_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:lognormal_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:lognormal_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> lognormal_distribution<span class='parenthesis'>(</span>RealType m, RealType s <span class='operator'>=</span> <span class='literal'>1.0</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.norm.lognormal-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.lognormal-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5835'>#</a></div><div class='texpara'><div id='dist.norm.lognormal-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.norm.lognormal-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.norm.lognormal-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.lognormal-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5839'>#</a></div><div class='texpara'><div id='dist.norm.lognormal-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>m</span> and <span class='texttt'>s</span>
correspond to the respective parameters of the distribution<a class='hidden_link' href='#dist.norm.lognormal-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:lognormal_distribution,m'><div id='lib:m,lognormal_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:m,lognormal_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType m<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.norm.lognormal-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.lognormal-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5851'>#</a></div><div class='texpara'><div id='dist.norm.lognormal-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>m</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.norm.lognormal-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:lognormal_distribution,s'><div id='lib:s,lognormal_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:s,lognormal_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType s<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.norm.lognormal-5'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.lognormal-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5863'>#</a></div><div class='texpara'><div id='dist.norm.lognormal-5.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>s</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.norm.lognormal-5.sentence-1'>.</a></div></div></div></div></div><div id='dist.norm.chisq' class='section'><h4 ><a class='secnum' href='#dist.norm.chisq' style='min-width:110pt'>29.5.9.5.3</a> Class template <span class='texttt'>chi_<span class='shy'></span>squared_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.norm.chisq'>[rand.dist.norm.chisq]</a></h4><div class='texpara'><a class='index' id='lib:chi_squared_distribution'></a></div><div class='para' id='dist.norm.chisq-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.chisq-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5876'>#</a></div><div class='texpara'><div id='dist.norm.chisq-1.sentence-1' class='sentence'>A <span class='texttt'>chi_<span class='shy'></span>squared_<span class='shy'></span>distribution</span> random number distribution
produces random numbers <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&gt;</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;">0</span></span></span></span></span></span>
distributed according to
the probability density function in Formula  <a href='#eq:rand.dist.norm.chisq'>29.15</a><a class='hidden_link' href='#dist.norm.chisq-1.sentence-1'>.</a></div> <div class='formula' id='eq:rand.dist.norm.chisq'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 18.628em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: 0.097em;"><span class="mjx-mlabeledtr" style="height: 2.869em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 10.916em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mfrac MJXc-space3"><span class="mjx-box MJXc-stacked" style="width: 6.278em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 6.278em; top: -1.587em;"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</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-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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 class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">e</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-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</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></span><span class="mjx-denominator" style="width: 6.278em; bottom: -1.281em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">Γ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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 class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><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-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 6.278em;" class="mjx-line"></span></span><span style="height: 2.869em; vertical-align: -1.281em;" class="mjx-vsize"></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -3.056em;"><span class="mjx-label" style="height: 2.869em;"><span id="mjx-eqn-29.15" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: 0.587em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.15)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div><div class='texpara'><span id='lib:chi_squared_distribution,result_type'><span id='lib:result_type,chi_squared_distribution'><span id='lib:chi_squared_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:chi_squared_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> chi_squared_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> RealType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructor and reset functions</span>
    <span class="added">constexpr </span>chi_squared_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> chi_squared_distribution<span class='parenthesis'>(</span><span class='literal'>1.0</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> chi_squared_distribution<span class='parenthesis'>(</span>RealType n<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> chi_squared_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> chi_squared_distribution<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> chi_squared_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>RealType n<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> chi_squared_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, chi_squared_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:chi_squared_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:chi_squared_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> chi_squared_distribution<span class='parenthesis'>(</span>RealType n<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.norm.chisq-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.chisq-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5935'>#</a></div><div class='texpara'><div id='dist.norm.chisq-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.225em;">n</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.norm.chisq-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.norm.chisq-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.chisq-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5939'>#</a></div><div class='texpara'><div id='dist.norm.chisq-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>n</span> corresponds to the parameter of the distribution<a class='hidden_link' href='#dist.norm.chisq-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:chi_squared_distribution,n'><div id='lib:n,chi_squared_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:n,chi_squared_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType n<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.norm.chisq-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.chisq-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5950'>#</a></div><div class='texpara'><div id='dist.norm.chisq-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>n</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.norm.chisq-4.sentence-1'>.</a></div></div></div></div></div><div id='dist.norm.cauchy' class='section'><h4 ><a class='secnum' href='#dist.norm.cauchy' style='min-width:110pt'>29.5.9.5.4</a> Class template <span class='texttt'>cauchy_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.norm.cauchy'>[rand.dist.norm.cauchy]</a></h4><div class='texpara'><a class='index' id='lib:cauchy_distribution'></a></div><div class='para' id='dist.norm.cauchy-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.cauchy-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L5963'>#</a></div><div class='texpara'><div id='dist.norm.cauchy-1.sentence-1' class='sentence'>A <span class='texttt'>cauchy_<span class='shy'></span>distribution</span> random number distribution
produces random numbers <span class='math'><span class='mathalpha'>x</span></span>
distributed according to
the probability density function in Formula  <a href='#eq:rand.dist.norm.cauchy'>29.16</a><a class='hidden_link' href='#dist.norm.cauchy-1.sentence-1'>.</a></div> <div class='formula' id='eq:rand.dist.norm.cauchy'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 24.702em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: -0.108em;"><span class="mjx-mlabeledtr" style="height: 3.265em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 16.99em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-msubsup MJXc-space3"><span class="mjx-base"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size4-R" style="padding-top: 1.551em; padding-bottom: 1.551em;">(</span></span><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">π</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span><span class="mjx-mrow MJXc-space1"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size4-R" style="padding-top: 1.551em; padding-bottom: 1.551em;">(</span></span><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-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">(</span></span><span class="mjx-mfrac"><span class="mjx-box MJXc-stacked" style="width: 2.523em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 2.523em; top: -1.285em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">a</span></span></span></span><span class="mjx-denominator" style="width: 2.523em; bottom: -0.795em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 2.523em;" class="mjx-line"></span></span><span style="height: 2.08em; vertical-align: -0.795em;" class="mjx-vsize"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">)</span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 1.7em; 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;">2</span></span></span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size4-R" style="padding-top: 1.551em; padding-bottom: 1.551em;">)</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size4-R" style="padding-top: 1.551em; padding-bottom: 1.551em;">)</span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 2.124em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -3.056em;"><span class="mjx-label" style="height: 3.265em;"><span id="mjx-eqn-29.16" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: 0.991em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.16)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div><div class='texpara'><span id='lib:cauchy_distribution,result_type'><span id='lib:result_type,cauchy_distribution'><span id='lib:cauchy_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:cauchy_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> cauchy_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> RealType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructor and reset functions</span>
    <span class="added">constexpr </span>cauchy_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> cauchy_distribution<span class='parenthesis'>(</span><span class='literal'>0.0</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> cauchy_distribution<span class='parenthesis'>(</span>RealType a, RealType b <span class='operator'>=</span> <span class='literal'>1.0</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> cauchy_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> cauchy_distribution<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> cauchy_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>RealType a<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>RealType b<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> cauchy_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, cauchy_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:cauchy_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:cauchy_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> cauchy_distribution<span class='parenthesis'>(</span>RealType a, RealType b <span class='operator'>=</span> <span class='literal'>1.0</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.norm.cauchy-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.cauchy-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6024'>#</a></div><div class='texpara'><div id='dist.norm.cauchy-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><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;">b</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.norm.cauchy-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.norm.cauchy-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.cauchy-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6028'>#</a></div><div class='texpara'><div id='dist.norm.cauchy-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>a</span> and <span class='texttt'>b</span>
correspond to the respective parameters of the distribution<a class='hidden_link' href='#dist.norm.cauchy-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:cauchy_distribution,a'><div id='lib:a,cauchy_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:a,cauchy_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType a<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.norm.cauchy-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.cauchy-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6040'>#</a></div><div class='texpara'><div id='dist.norm.cauchy-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>a</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.norm.cauchy-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:cauchy_distribution,b'><div id='lib:b,cauchy_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:b,cauchy_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType b<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.norm.cauchy-5'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.cauchy-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6052'>#</a></div><div class='texpara'><div id='dist.norm.cauchy-5.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>b</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.norm.cauchy-5.sentence-1'>.</a></div></div></div></div></div><div id='dist.norm.f' class='section'><h4 ><a class='secnum' href='#dist.norm.f' style='min-width:110pt'>29.5.9.5.5</a> Class template <span class='texttt'>fisher_<span class='shy'></span>f_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.norm.f'>[rand.dist.norm.f]</a></h4><div class='texpara'><a class='index' id='lib:fisher_f_distribution'></a></div><div class='para' id='dist.norm.f-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.f-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6065'>#</a></div><div class='texpara'><div id='dist.norm.f-1.sentence-1' class='sentence'>A <span class='texttt'>fisher_<span class='shy'></span>f_<span class='shy'></span>distribution</span> random number distribution
produces random numbers <span class='math'><span class='mathalpha'>x</span> &ensp;≥&ensp;0</span>
distributed according to
the probability density function in Formula  <a href='#eq:rand.dist.norm.f'>29.17</a><a class='hidden_link' href='#dist.norm.f-1.sentence-1'>.</a></div> <div class='formula' id='eq:rand.dist.norm.f'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 38.11em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: -0.099em;"><span class="mjx-mlabeledtr" style="height: 2.879em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 30.398em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mfrac MJXc-space3"><span class="mjx-box MJXc-stacked" style="width: 6.762em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 6.762em; top: -1.789em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">Γ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">(</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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 class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">)</span></span></span></span></span></span><span class="mjx-denominator" style="width: 6.762em; bottom: -1.09em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">Γ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</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 class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mspace" style="width: 0.278em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">Γ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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 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 style="border-bottom: 1.3px solid; top: -0.296em; width: 6.762em;" class="mjx-line"></span></span><span style="height: 2.879em; vertical-align: -1.09em;" class="mjx-vsize"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">(</span></span><span class="mjx-mfrac"><span class="mjx-box MJXc-stacked" style="width: 1.078em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 1.078em; top: -1.144em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span></span><span class="mjx-denominator" style="width: 1.078em; bottom: -0.722em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 1.078em;" class="mjx-line"></span></span><span style="height: 1.865em; vertical-align: -0.722em;" class="mjx-vsize"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">)</span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 1.276em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</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-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.584em; padding-left: 0px; padding-right: 0.071em;"><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 class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</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 class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">(</span></span><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-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mfrac MJXc-space2"><span class="mjx-box MJXc-stacked" style="width: 1.65em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 1.65em; top: -1.144em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span></span></span><span class="mjx-denominator" style="width: 1.65em; bottom: -0.722em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 1.65em;" class="mjx-line"></span></span><span style="height: 1.865em; vertical-align: -0.722em;" class="mjx-vsize"></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.961em; padding-bottom: 0.961em;">)</span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 1.276em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">m</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -3.056em;"><span class="mjx-label" style="height: 2.879em;"><span id="mjx-eqn-29.17" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: 0.789em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.17)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div><div class='texpara'><span id='lib:fisher_distribution,result_type'><span id='lib:result_type,fisher_distribution'><span id='lib:fisher_f_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:fisher_f_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> fisher_f_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> RealType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructor and reset functions</span>
    <span class="added">constexpr </span>fisher_f_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> fisher_f_distribution<span class='parenthesis'>(</span><span class='literal'>1.0</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> fisher_f_distribution<span class='parenthesis'>(</span>RealType m, RealType n <span class='operator'>=</span> <span class='literal'>1.0</span><span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> fisher_f_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> fisher_f_distribution<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> fisher_f_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>RealType m<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>RealType n<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> fisher_f_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, fisher_f_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:fisher_f_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:fisher_f_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> fisher_f_distribution<span class='parenthesis'>(</span>RealType m, RealType n <span class='operator'>=</span> <span class='literal'>1</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.norm.f-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.f-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6128'>#</a></div><div class='texpara'><div id='dist.norm.f-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.225em;">m</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span> and <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.225em;">n</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.norm.f-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.norm.f-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.f-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6132'>#</a></div><div class='texpara'><div id='dist.norm.f-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>m</span> and <span class='texttt'>n</span>
correspond to the respective parameters of the distribution<a class='hidden_link' href='#dist.norm.f-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:fisher_f_distribution,m'><div id='lib:m,fisher_f_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:m,fisher_f_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType m<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.norm.f-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.f-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6144'>#</a></div><div class='texpara'><div id='dist.norm.f-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>m</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.norm.f-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:fisher_f_distribution,n'><div id='lib:n,fisher_f_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:n,fisher_f_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType n<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.norm.f-5'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.f-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6156'>#</a></div><div class='texpara'><div id='dist.norm.f-5.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>n</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.norm.f-5.sentence-1'>.</a></div></div></div></div></div><div id='dist.norm.t' class='section'><h4 ><a class='secnum' href='#dist.norm.t' style='min-width:110pt'>29.5.9.5.6</a> Class template <span class='texttt'>student_<span class='shy'></span>t_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.norm.t'>[rand.dist.norm.t]</a></h4><div class='texpara'><a class='index' id='lib:student_t_distribution'></a></div><div class='para' id='dist.norm.t-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.t-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6169'>#</a></div><div class='texpara'><div id='dist.norm.t-1.sentence-1' class='sentence'>A <span class='texttt'>student_<span class='shy'></span>t_<span class='shy'></span>distribution</span> random number distribution
produces random numbers <span class='math'><span class='mathalpha'>x</span></span>
distributed according to
the probability density function in Formula  <a href='#eq:rand.dist.norm.t'>29.18</a><a class='hidden_link' href='#dist.norm.t-1.sentence-1'>.</a></div> <div class='formula' id='eq:rand.dist.norm.t'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 29.848em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: -0.076em;"><span class="mjx-mlabeledtr" style="height: 2.953em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 22.136em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mfrac MJXc-space3"><span class="mjx-box MJXc-stacked" style="width: 2.206em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 2.206em; top: -1.368em;"><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><span class="mjx-denominator" style="width: 2.206em; bottom: -1.15em;"><span class="mjx-msqrt"><span class="mjx-box" style="padding-top: 0.045em;"><span class="mjx-surd"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.519em; padding-bottom: 0.519em;">√</span></span><span class="mjx-box" style="padding-top: 0.236em; border-top: 1px solid;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em; padding-right: 0.003em;">π</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 2.206em;" class="mjx-line"></span></span><span style="height: 2.518em; vertical-align: -1.15em;" class="mjx-vsize"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mfrac"><span class="mjx-box MJXc-stacked" style="width: 5.841em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 5.841em; top: -1.789em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">Γ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">(</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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 class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">)</span></span></span></span></span></span><span class="mjx-denominator" style="width: 5.841em; bottom: -1.09em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">Γ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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 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 style="border-bottom: 1.3px solid; top: -0.296em; width: 5.841em;" class="mjx-line"></span></span><span style="height: 2.879em; vertical-align: -1.09em;" class="mjx-vsize"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">(</span></span><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-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mfrac MJXc-space2"><span class="mjx-box MJXc-stacked" style="width: 1.161em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 1.161em; top: -1.528em;"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</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-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 class="mjx-denominator" style="width: 1.161em; bottom: -0.722em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 1.161em;" class="mjx-line"></span></span><span style="height: 2.25em; vertical-align: -0.722em;" class="mjx-vsize"></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size3-R" style="padding-top: 1.256em; padding-bottom: 1.256em;">)</span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 1.775em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -3.056em;"><span class="mjx-label" style="height: 2.953em;"><span id="mjx-eqn-29.18" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: 0.803em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.18)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div><div class='texpara'><span id='lib:student_t_distribution,result_type'><span id='lib:result_type,student_t_distribution'><span id='lib:student_t_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:student_t_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> student_t_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> RealType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructor and reset functions</span>
    <span class="added">constexpr </span>student_t_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> student_t_distribution<span class='parenthesis'>(</span><span class='literal'>1.0</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="added">constexpr </span><span class='keyword'>explicit</span> student_t_distribution<span class='parenthesis'>(</span>RealType n<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> student_t_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> student_t_distribution<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> student_t_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>RealType n<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> student_t_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, student_t_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:student_t_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:student_t_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span><span class='keyword'>explicit</span> student_t_distribution<span class='parenthesis'>(</span>RealType n<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.norm.t-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.t-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6230'>#</a></div><div class='texpara'><div id='dist.norm.t-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.225em;">n</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.norm.t-2.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.norm.t-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.t-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6234'>#</a></div><div class='texpara'><div id='dist.norm.t-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>n</span> corresponds to the parameter of the distribution<a class='hidden_link' href='#dist.norm.t-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:student_t_distribution,mean'><div id='lib:mean,student_t_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mean,student_t_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>RealType n<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.norm.t-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.norm.t-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6245'>#</a></div><div class='texpara'><div id='dist.norm.t-4.sentence-1' class='sentence'><i >Returns</i>: The value of the <span class='texttt'>n</span> parameter
 with which the object was constructed<a class='hidden_link' href='#dist.norm.t-4.sentence-1'>.</a></div></div></div></div><div class='texpara'></div></div></div><div id='dist.samp' class='section'><h4 ><a class='secnum' href='#dist.samp' style='min-width:95pt'>29.5.9.6</a> Sampling distributions <a class='abbr_ref' href='rand.dist.samp'>[rand.dist.samp]</a></h4><div class='texpara'><a class='index' id=':sampling_distributions'></a><a class='index' id=':random_number_distributions,sampling'></a></div><div id='dist.samp.discrete' class='section'><h4 ><a class='secnum' href='#dist.samp.discrete' style='min-width:110pt'>29.5.9.6.1</a> Class template <span class='texttt'>discrete_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.samp.discrete'>[rand.dist.samp.discrete]</a></h4><div class='texpara'><a class='index' id='lib:discrete_distribution'></a></div><div class='para' id='dist.samp.discrete-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.discrete-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6272'>#</a></div><div class='texpara'><div id='dist.samp.discrete-1.sentence-1' class='sentence'>A <span class='texttt'>discrete_<span class='shy'></span>distribution</span> random number distribution
produces random integers <span class='math'><span class='mathalpha'>i</span></span>, <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≤</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span>,
distributed according to
the discrete probability function in Formula  <a href='#eq:rand.dist.samp.discrete'>29.19</a><a class='hidden_link' href='#dist.samp.discrete-1.sentence-1'>.</a></div> <div class='formula' id='eq:rand.dist.samp.discrete'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 17.299em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: -0.012em;"><span class="mjx-mlabeledtr" style="height: 1.075em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 9.587em;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.109em;">P</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-msubsup MJXc-space3"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -3.056em;"><span class="mjx-label" style="height: 1.075em;"><span id="mjx-eqn-29.19" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.19)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div></div><div class='para' id='dist.samp.discrete-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.discrete-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6281'>#</a></div><div class='texpara'><div id='dist.samp.discrete-2.sentence-1' class='sentence'>Unless specified otherwise,
the distribution parameters are calculated as:
<span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</span></span></span></span></span></span></span></span> for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span>,
in which the values <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span>,
commonly known as the <a class='hidden_link' href='#def:weights' id='def:weights'><i>weights</i></a>, shall be non-negative, non-NaN, and non-infinity<a class='hidden_link' href='#dist.samp.discrete-2.sentence-1'>.</a></div> <div id='dist.samp.discrete-2.sentence-2' class='sentence'>Moreover, the following relation shall hold:
<span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</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-msubsup MJXc-space3"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋯</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.discrete-2.sentence-2'>.</a></div></div><div class='texpara'><span id='lib:discrete_distribution,result_type'><span id='lib:result_type,discrete_distribution'><span id='lib:discrete_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:discrete_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> IntType <span class='operator'>=</span> <span class='keyword'>int</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> discrete_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> IntType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructor and reset functions</span>
    <span class="added">constexpr </span>discrete_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>discrete_distribution<span class='parenthesis'>(</span>InputIterator firstW, InputIterator lastW<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>discrete_distribution<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span><span class='keyword'>double</span><span class='anglebracket'>&gt;</span> wl<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UnaryOperation<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>discrete_distribution<span class='parenthesis'>(</span>size_t nw, <span class='keyword'>double</span> xmin, <span class='keyword'>double</span> xmax, UnaryOperation fw<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> discrete_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> discrete_distribution<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> discrete_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>vector<span class='anglebracket'>&lt;</span><span class='keyword'>double</span><span class='anglebracket'>&gt;</span> probabilities<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> discrete_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, discrete_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:discrete_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:discrete_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>discrete_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.samp.discrete-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.discrete-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6345'>#</a></div><div class='texpara'><div id='dist.samp.discrete-3.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>discrete_<span class='shy'></span>distribution</span> object
with <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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;">1</span></span></span></span></span></span> and <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.discrete-3.sentence-1'>.</a></div> <div id='dist.samp.discrete-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#dist.samp.discrete-note-1'>1</a></i>:&ensp;<div id='dist.samp.discrete-3.sentence-2' class='sentence'>Such an object will always deliver the value <span class='math'>0</span><a class='hidden_link' href='#dist.samp.discrete-3.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div><div class='texpara'><div id='lib:discrete_distribution,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:discrete_distribution,constructor_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>discrete_distribution<span class='parenthesis'>(</span>InputIterator firstW, InputIterator lastW<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.samp.discrete-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.discrete-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6362'>#</a></div><div class='texpara'><div id='dist.samp.discrete-4.sentence-1' class='sentence'><i >Mandates</i>: <span class='texttt'>is_<span class='shy'></span>convertible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>iterator_<span class='shy'></span>traits<span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>value_<span class='shy'></span>type,
<span class='keyword'>double</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#dist.samp.discrete-4.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.samp.discrete-5'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.discrete-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6367'>#</a></div><div class='texpara'><div id='dist.samp.discrete-5.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>InputIterator</span> meets the
  <a href='input.iterators#:Cpp17InputIterator' title='24.3.5.3&emsp;Input iterators&emsp;[input.iterators]'><i >Cpp17InputIterator</i></a> requirements (<a href='input.iterators' title='24.3.5.3&emsp;Input iterators'>[input.<span class='shy'></span>iterators]</a>)<a class='hidden_link' href='#dist.samp.discrete-5.sentence-1'>.</a></div> <div id='dist.samp.discrete-5.sentence-2' class='sentence'>If <span class='texttt'>firstW <span class='operator'>=</span><span class='operator'>=</span> lastW</span>,
 let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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;">1</span></span></span></span></span></span> and <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.discrete-5.sentence-2'>.</a></div> <div id='dist.samp.discrete-5.sentence-3' class='sentence'>Otherwise,
 <span class='math'><span class='bigl'></span>[<span class='texttt'>firstW</span>, <span class='texttt'>lastW</span><span class='bigr'></span>)</span>
 forms a sequence <span class='math'><span class='mathalpha'>w</span></span> of length <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&gt;</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;">0</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.discrete-5.sentence-3'>.</a></div></div></div></div><div class='para' id='dist.samp.discrete-6'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.discrete-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6377'>#</a></div><div class='texpara'><div id='dist.samp.discrete-6.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>discrete_<span class='shy'></span>distribution</span> object
with probabilities given by the Formula  <a href='#eq:rand.dist.samp.discrete'>29.19</a><a class='hidden_link' href='#dist.samp.discrete-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:discrete_distribution,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:discrete_distribution,constructor__'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>discrete_distribution<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span><span class='keyword'>double</span><span class='anglebracket'>&gt;</span> wl<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.samp.discrete-7'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.discrete-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6390'>#</a></div><div class='texpara'><div id='dist.samp.discrete-7.sentence-1' class='sentence'><i >Effects</i>: Same as <span class='texttt'>discrete_<span class='shy'></span>distribution<span class='parenthesis'>(</span>wl<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, wl<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#dist.samp.discrete-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:discrete_distribution,constructor___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:discrete_distribution,constructor___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UnaryOperation<span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>discrete_distribution<span class='parenthesis'>(</span>size_t nw, <span class='keyword'>double</span> xmin, <span class='keyword'>double</span> xmax, UnaryOperation fw<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.samp.discrete-8'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.discrete-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6402'>#</a></div><div class='texpara'><div id='dist.samp.discrete-8.sentence-1' class='sentence'><i >Mandates</i>: <span class='texttt'>is_<span class='shy'></span>invocable_<span class='shy'></span>r_<span class='shy'></span>v<span class='anglebracket'>&lt;</span><span class='keyword'>double</span>, UnaryOperation<span class='operator'>&amp;</span>, <span class='keyword'>double</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#dist.samp.discrete-8.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.samp.discrete-9'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.discrete-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6406'>#</a></div><div class='texpara'><div id='dist.samp.discrete-9.sentence-1' class='sentence'><i >Preconditions</i>: If <span class='math'><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.225em; padding-bottom: 0.298em;">nw</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></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;">0</span></span></span></span></span></span>, let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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;">1</span></span></span></span></span></span>, otherwise let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">nw</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.discrete-9.sentence-1'>.</a></div> <div id='dist.samp.discrete-9.sentence-2' class='sentence'>The relation
   <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.007em;">δ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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.225em; padding-bottom: 0.298em;">xmax</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-texatom MJXc-space2"><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;">xmin</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span>
 holds<a class='hidden_link' href='#dist.samp.discrete-9.sentence-2'>.</a></div></div></div></div><div class='para' id='dist.samp.discrete-10'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.discrete-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6413'>#</a></div><div class='texpara'><div id='dist.samp.discrete-10.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>discrete_<span class='shy'></span>distribution</span> object
 with probabilities given by the formula above,
 using the following values:
 If <span class='math'><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.225em; padding-bottom: 0.298em;">nw</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></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;">0</span></span></span></span></span></span>,
 let <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.discrete-10.sentence-1'>.</a></div> <div id='dist.samp.discrete-10.sentence-2' class='sentence'>Otherwise,
 let <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">fw</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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;">xmin</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.007em;">δ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.007em;">δ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></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 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></span>
 for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.discrete-10.sentence-2'>.</a></div></div></div></div><div class='para' id='dist.samp.discrete-11'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.discrete-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6424'>#</a></div><div class='texpara'><div id='dist.samp.discrete-11.sentence-1' class='sentence'><i >Complexity</i>: The number of invocations of <span class='texttt'>fw</span> does not exceed <span class='math'><span class='mathalpha'>n</span></span><a class='hidden_link' href='#dist.samp.discrete-11.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:discrete_distribution,probabilities'><div id='lib:probabilities,discrete_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:probabilities,discrete_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>vector<span class='anglebracket'>&lt;</span><span class='keyword'>double</span><span class='anglebracket'>&gt;</span> probabilities<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.samp.discrete-12'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.discrete-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6435'>#</a></div><div class='texpara'><div id='dist.samp.discrete-12.sentence-1' class='sentence'><i >Returns</i>: A <span class='texttt'>vector<span class='anglebracket'>&lt;</span><span class='keyword'>double</span><span class='anglebracket'>&gt;</span></span>
 whose <span class='texttt'>size</span> member returns <span class='math'><span class='mathalpha'>n</span></span>
 and whose <span class='texttt'><span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span></span> member returns <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span>
 when invoked with argument <span class='math'><span class='mathalpha'>k</span></span> for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.discrete-12.sentence-1'>.</a></div></div></div></div></div><div id='dist.samp.pconst' class='section'><h4 ><a class='secnum' href='#dist.samp.pconst' style='min-width:110pt'>29.5.9.6.2</a> Class template <span class='texttt'>piecewise_<span class='shy'></span>constant_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.samp.pconst'>[rand.dist.samp.pconst]</a></h4><div class='texpara'><a class='index' id='lib:piecewise_constant_distribution'></a></div><div class='para' id='dist.samp.pconst-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.pconst-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6451'>#</a></div><div class='texpara'><div id='dist.samp.pconst-1.sentence-1' class='sentence'>A <span class='texttt'>piecewise_<span class='shy'></span>constant_<span class='shy'></span>distribution</span> random number distribution
produces random numbers <span class='math'><span class='mathalpha'>x</span></span>,
<span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≤</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-msubsup MJXc-space3"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span></span></span>,
uniformly distributed over each subinterval
<span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">[</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span><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></span>
according to the probability density function in Formula  <a href='#eq:rand.dist.samp.pconst'>29.20</a><a class='hidden_link' href='#dist.samp.pconst-1.sentence-1'>.</a></div> <div class='formula' id='eq:rand.dist.samp.pconst'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 29.763em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: -0.012em;"><span class="mjx-mlabeledtr" style="height: 1.075em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 22.051em;"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mspace" style="width: 0.278em; height: 0px;"></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.519em;"> , for </span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≤</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-msubsup MJXc-space3"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span></span></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -3.056em;"><span class="mjx-label" style="height: 1.075em;"><span id="mjx-eqn-29.20" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: -0.2em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.20)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div></div><div class='para' id='dist.samp.pconst-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.pconst-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6463'>#</a></div><div class='texpara'><div id='dist.samp.pconst-2.sentence-1' class='sentence'>The <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span> distribution parameters <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span>,
also known as this distribution's <a class='hidden_link' href='#def:interval_boundaries' id='def:interval_boundaries'><i>interval boundaries</i></a>, shall satisfy the relation
<span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-msubsup MJXc-space3"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span></span></span></span></span> for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.pconst-2.sentence-1'>.</a></div> <div id='dist.samp.pconst-2.sentence-2' class='sentence'>Unless specified otherwise,
the remaining <span class='math'><span class='mathalpha'>n</span></span> distribution parameters are calculated as:
<br><span class='math'><span class="mjx-chtml MJXc-display" style="text-align: center;"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-mfrac MJXc-space3"><span class="mjx-box MJXc-stacked" style="width: 6.137em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 6.137em; top: -1.188em;"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span><span class="mjx-denominator" style="width: 6.137em; bottom: -1.09em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span><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 style="border-bottom: 1.3px solid; top: -0.296em; width: 6.137em;" class="mjx-line"></span></span><span style="height: 2.279em; vertical-align: -1.09em;" class="mjx-vsize"></span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.372em;"> for </span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;"> ,</span></span></span></span></span></span>
in which the values <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span>,
commonly known as the <a class='hidden_link' href='#def:weights' id='def:weights'><i>weights</i></a>, shall be non-negative, non-NaN, and non-infinity<a class='hidden_link' href='#dist.samp.pconst-2.sentence-2'>.</a></div> <div id='dist.samp.pconst-2.sentence-3' class='sentence'>Moreover, the following relation shall hold:
 <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</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-msubsup MJXc-space3"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋯</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.pconst-2.sentence-3'>.</a></div></div><div class='texpara'><span id='lib:piecewise_constant_distribution,result_type'><span id='lib:result_type,piecewise_constant_distribution'><span id='lib:piecewise_constant_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:piecewise_constant_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> piecewise_constant_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> RealType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructor and reset functions</span>
    <span class="added">constexpr </span>piecewise_constant_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIteratorB, <span class='keyword'>class</span> InputIteratorW<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>piecewise_constant_distribution<span class='parenthesis'>(</span>InputIteratorB firstB, InputIteratorB lastB,
                                      InputIteratorW firstW<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UnaryOperation<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>piecewise_constant_distribution<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>RealType<span class='anglebracket'>&gt;</span> bl, UnaryOperation fw<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UnaryOperation<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>piecewise_constant_distribution<span class='parenthesis'>(</span>size_t nw, RealType xmin, RealType xmax,
                                      UnaryOperation fw<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> piecewise_constant_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> piecewise_constant_distribution<span class='operator'>&amp;</span> x,
                           <span class='keyword'>const</span> piecewise_constant_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>vector<span class='anglebracket'>&lt;</span>result_type<span class='anglebracket'>&gt;</span> intervals<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>vector<span class='anglebracket'>&lt;</span>result_type<span class='anglebracket'>&gt;</span> densities<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> piecewise_constant_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, piecewise_constant_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:piecewise_constant_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:piecewise_constant_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>piecewise_constant_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.samp.pconst-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.pconst-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6537'>#</a></div><div class='texpara'><div id='dist.samp.pconst-3.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>piecewise_<span class='shy'></span>constant_<span class='shy'></span>distribution</span> object
 with <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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;">1</span></span></span></span></span></span>,
 <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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;">1</span></span></span></span></span></span>,
 <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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;">0</span></span></span></span></span></span>,
 and <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</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;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.pconst-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:piecewise_constant_distribution,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:piecewise_constant_distribution,constructor_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIteratorB, <span class='keyword'>class</span> InputIteratorW<span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>piecewise_constant_distribution<span class='parenthesis'>(</span>InputIteratorB firstB, InputIteratorB lastB,
                                  InputIteratorW firstW<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.samp.pconst-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.pconst-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6555'>#</a></div><div class='texpara'><div id='dist.samp.pconst-4.sentence-1' class='sentence'><i >Mandates</i>: Both of
<ul class='itemize'><li id='dist.samp.pconst-4.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#dist.samp.pconst-4.1'>(4.1)</a></div><span class='texttt'>is_<span class='shy'></span>convertible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>iterator_<span class='shy'></span>traits<span class='anglebracket'>&lt;</span>InputIteratorB<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>value_<span class='shy'></span>type, <span class='keyword'>double</span><span class='anglebracket'>&gt;</span></span></li><li id='dist.samp.pconst-4.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#dist.samp.pconst-4.2'>(4.2)</a></div><span class='texttt'>is_<span class='shy'></span>convertible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>iterator_<span class='shy'></span>traits<span class='anglebracket'>&lt;</span>InputIteratorW<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>value_<span class='shy'></span>type, <span class='keyword'>double</span><span class='anglebracket'>&gt;</span></span></li></ul>
are <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#dist.samp.pconst-4.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.samp.pconst-5'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.pconst-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6564'>#</a></div><div class='texpara'><div id='dist.samp.pconst-5.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>InputIteratorB</span> and <span class='texttt'>InputIteratorW</span>
   each meet the
  <a href='input.iterators#:Cpp17InputIterator' title='24.3.5.3&emsp;Input iterators&emsp;[input.iterators]'><i >Cpp17InputIterator</i></a> requirements (<a href='input.iterators' title='24.3.5.3&emsp;Input iterators'>[input.<span class='shy'></span>iterators]</a>)<a class='hidden_link' href='#dist.samp.pconst-5.sentence-1'>.</a></div> <div id='dist.samp.pconst-5.sentence-2' class='sentence'>If <span class='texttt'>firstB <span class='operator'>=</span><span class='operator'>=</span> lastB</span>
 or <span class='texttt'><span class='operator'>+</span><span class='operator'>+</span>firstB <span class='operator'>=</span><span class='operator'>=</span> lastB</span>,
 let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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;">1</span></span></span></span></span></span>,
     <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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;">1</span></span></span></span></span></span>,
     <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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;">0</span></span></span></span></span></span>,
 and <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</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;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.pconst-5.sentence-2'>.</a></div> <div id='dist.samp.pconst-5.sentence-3' class='sentence'>Otherwise,
 <span class='math'><span class='bigl'></span>[<span class='texttt'>firstB</span>, <span class='texttt'>lastB</span><span class='bigr'></span>)</span>
 forms a sequence <span class='math'><span class='mathalpha'>b</span></span> of length <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span>,
 the length of the sequence <span class='math'><span class='mathalpha'>w</span></span> starting from <span class='texttt'>firstW</span>
 is at least <span class='math'><span class='mathalpha'>n</span></span>,
 and any <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span> for  <span class='math'><span class='mathalpha'>k</span> &ensp;≥&ensp;<span class='mathalpha'>n</span></span> are ignored by the distribution<a class='hidden_link' href='#dist.samp.pconst-5.sentence-3'>.</a></div></div></div></div><div class='para' id='dist.samp.pconst-6'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.pconst-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6582'>#</a></div><div class='texpara'><div id='dist.samp.pconst-6.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>piecewise_<span class='shy'></span>constant_<span class='shy'></span>distribution</span> object
 with parameters as specified above<a class='hidden_link' href='#dist.samp.pconst-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:piecewise_constant_distribution,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:piecewise_constant_distribution,constructor__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UnaryOperation<span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>piecewise_constant_distribution<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>RealType<span class='anglebracket'>&gt;</span> bl, UnaryOperation fw<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.samp.pconst-7'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.pconst-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6596'>#</a></div><div class='texpara'><div id='dist.samp.pconst-7.sentence-1' class='sentence'><i >Mandates</i>: <span class='texttt'>is_<span class='shy'></span>invocable_<span class='shy'></span>r_<span class='shy'></span>v<span class='anglebracket'>&lt;</span><span class='keyword'>double</span>, UnaryOperation<span class='operator'>&amp;</span>, <span class='keyword'>double</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#dist.samp.pconst-7.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.samp.pconst-8'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.pconst-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6600'>#</a></div><div class='texpara'><div id='dist.samp.pconst-8.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>piecewise_<span class='shy'></span>constant_<span class='shy'></span>distribution</span> object
 with parameters taken or calculated
 from the following values:
 If <span class='math'><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.519em; padding-bottom: 0.372em;">bl<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</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></span>,
 let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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;">1</span></span></span></span></span></span>,
     <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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;">1</span></span></span></span></span></span>,
     <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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;">0</span></span></span></span></span></span>,
 and <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</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;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.pconst-8.sentence-1'>.</a></div> <div id='dist.samp.pconst-8.sentence-2' class='sentence'>Otherwise,
 let <span class='math'><span class='bigl'></span>[<span class='texttt'>bl<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>, <span class='texttt'>bl<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><span class='bigr'></span>)</span>
 form a sequence <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span></span></span>,
 and
 let <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">fw</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">(</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">(</span></span></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">)</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-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">2</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size1-R" style="padding-top: 0.593em; padding-bottom: 0.593em;">)</span></span></span></span></span></span></span></span>
 for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.pconst-8.sentence-2'>.</a></div></div></div></div><div class='para' id='dist.samp.pconst-9'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.pconst-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6617'>#</a></div><div class='texpara'><div id='dist.samp.pconst-9.sentence-1' class='sentence'><i >Complexity</i>: The number of invocations of <span class='texttt'>fw</span> does not exceed <span class='math'><span class='mathalpha'>n</span></span><a class='hidden_link' href='#dist.samp.pconst-9.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:piecewise_constant_distribution,constructor___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:piecewise_constant_distribution,constructor___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UnaryOperation<span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>piecewise_constant_distribution<span class='parenthesis'>(</span>size_t nw, RealType xmin, RealType xmax, UnaryOperation fw<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.samp.pconst-10'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.pconst-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6630'>#</a></div><div class='texpara'><div id='dist.samp.pconst-10.sentence-1' class='sentence'><i >Mandates</i>: <span class='texttt'>is_<span class='shy'></span>invocable_<span class='shy'></span>r_<span class='shy'></span>v<span class='anglebracket'>&lt;</span><span class='keyword'>double</span>, UnaryOperation<span class='operator'>&amp;</span>, <span class='keyword'>double</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#dist.samp.pconst-10.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.samp.pconst-11'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.pconst-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6634'>#</a></div><div class='texpara'><div id='dist.samp.pconst-11.sentence-1' class='sentence'><i >Preconditions</i>: If <span class='math'><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.225em; padding-bottom: 0.298em;">nw</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></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;">0</span></span></span></span></span></span>, let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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;">1</span></span></span></span></span></span>, otherwise let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">nw</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.pconst-11.sentence-1'>.</a></div> <div id='dist.samp.pconst-11.sentence-2' class='sentence'>The relation <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.007em;">δ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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.225em; padding-bottom: 0.298em;">xmax</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-texatom MJXc-space2"><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;">xmin</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span>
 holds<a class='hidden_link' href='#dist.samp.pconst-11.sentence-2'>.</a></div></div></div></div><div class='para' id='dist.samp.pconst-12'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.pconst-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6640'>#</a></div><div class='texpara'><div id='dist.samp.pconst-12.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>piecewise_<span class='shy'></span>constant_<span class='shy'></span>distribution</span> object
 with parameters taken or calculated
 from the following values:
 Let <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-texatom MJXc-space3"><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;">xmin</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.007em;">δ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span> for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span>,
 and <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">fw</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.007em;">δ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></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 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></span> for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.pconst-12.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.samp.pconst-13'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.pconst-13'>13</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6648'>#</a></div><div class='texpara'><div id='dist.samp.pconst-13.sentence-1' class='sentence'><i >Complexity</i>: The number of invocations of <span class='texttt'>fw</span> does not exceed <span class='math'><span class='mathalpha'>n</span></span><a class='hidden_link' href='#dist.samp.pconst-13.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:piecewise_constant_distribution,intervals'><div id='lib:intervals,piecewise_constant_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:intervals,piecewise_constant_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>vector<span class='anglebracket'>&lt;</span>result_type<span class='anglebracket'>&gt;</span> intervals<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.samp.pconst-14'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.pconst-14'>14</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6659'>#</a></div><div class='texpara'><div id='dist.samp.pconst-14.sentence-1' class='sentence'><i >Returns</i>: A <span class='texttt'>vector<span class='anglebracket'>&lt;</span>result_<span class='shy'></span>type<span class='anglebracket'>&gt;</span></span>
 whose <span class='texttt'>size</span> member returns <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span>
 and whose <span class='math'><span class='texttt'><span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span></span></span> member returns <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span>
 when invoked with argument <span class='math'><span class='mathalpha'>k</span></span> for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.pconst-14.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:piecewise_constant_distribution,densities'><div id='lib:densities,piecewise_constant_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:densities,piecewise_constant_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>vector<span class='anglebracket'>&lt;</span>result_type<span class='anglebracket'>&gt;</span> densities<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.samp.pconst-15'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.pconst-15'>15</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6673'>#</a></div><div class='texpara'><div id='dist.samp.pconst-15.sentence-1' class='sentence'><i >Returns</i>: A <span class='texttt'>vector<span class='anglebracket'>&lt;</span>result_<span class='shy'></span>type<span class='anglebracket'>&gt;</span></span>
 whose <span class='texttt'>size</span> member returns <span class='math'><span class='mathalpha'>n</span></span>
 and whose <span class='math'><span class='texttt'><span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span></span></span> member returns <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span>
 when invoked with argument <span class='math'><span class='mathalpha'>k</span></span> for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.pconst-15.sentence-1'>.</a></div></div></div></div></div><div id='dist.samp.plinear' class='section'><h4 ><a class='secnum' href='#dist.samp.plinear' style='min-width:110pt'>29.5.9.6.3</a> Class template <span class='texttt'>piecewise_<span class='shy'></span>linear_<span class='shy'></span>distribution</span> <a class='abbr_ref' href='rand.dist.samp.plinear'>[rand.dist.samp.plinear]</a></h4><div class='texpara'><a class='index' id='lib:piecewise_linear_distribution'></a></div><div class='para' id='dist.samp.plinear-1'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.plinear-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6689'>#</a></div><div class='texpara'><div id='dist.samp.plinear-1.sentence-1' class='sentence'>A <span class='texttt'>piecewise_<span class='shy'></span>linear_<span class='shy'></span>distribution</span> random number distribution
produces random numbers <span class='math'><span class='mathalpha'>x</span></span>,
<span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≤</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-msubsup MJXc-space3"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span></span></span>,
distributed over each subinterval
<span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">[</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span><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></span>
according to the probability density function in Formula  <a href='#eq:rand.dist.samp.plinear'>29.21</a><a class='hidden_link' href='#dist.samp.plinear-1.sentence-1'>.</a></div> <div class='formula' id='eq:rand.dist.samp.plinear'><span class="mjx-chtml MJXc-display"><span class="mjx-math" style="width: 100%;"><span class="mjx-mrow" style="width: 100%;" aria-hidden="true"><span class="mjx-mtable" style="width: 100%; min-width: 41.47em;"><span style="width: 100%; text-align: center;" class="mjx-box"><span class="mjx-table" style="display: inline-table; width: auto; vertical-align: 0;"><span class="mjx-mlabeledtr" style="height: 2.47em;"><span class="mjx-mtd" style="padding: 0px 0px 0px 0px; width: 33.758em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mspace" style="width: 0.167em; height: 0px;"></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mspace" style="width: 0.278em; height: 0px;"></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mfrac"><span class="mjx-box MJXc-stacked" style="width: 3.743em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 3.743em; top: -1.485em;"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span></span></span><span class="mjx-denominator" style="width: 3.743em; bottom: -0.985em;"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 3.743em;" class="mjx-line"></span></span><span style="height: 2.47em; vertical-align: -0.985em;" class="mjx-vsize"></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mfrac"><span class="mjx-box MJXc-stacked" style="width: 3.743em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 3.743em; top: -1.435em;"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span><span class="mjx-denominator" style="width: 3.743em; bottom: -0.985em;"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span><span style="border-bottom: 1.3px solid; top: -0.296em; width: 3.743em;" class="mjx-line"></span></span><span style="height: 2.42em; vertical-align: -0.985em;" class="mjx-vsize"></span></span></span></span><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.519em;"> , for </span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≤</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-msubsup MJXc-space3"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span></span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">.</span></span></span><span class="mjx-strut"></span></span></span></span></span></span><span class="mjx-itable" style="vertical-align: top; margin-left: -3.056em;"><span class="mjx-label" style="height: 2.47em;"><span id="mjx-eqn-29.21" class="mjx-mtd"><span class="mjx-mrow" style="margin-top: 0.485em;"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(29.21)</span></span><span class="mjx-strut"></span></span></span></span></span></span></span></span></span></div></div></div><div class='para' id='dist.samp.plinear-2'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.plinear-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6703'>#</a></div><div class='texpara'><div id='dist.samp.plinear-2.sentence-1' class='sentence'>The <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span> distribution parameters <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span></span></span></span></span>,
also known as this distribution's <a class='hidden_link' href='#def:interval_boundaries' id='def:interval_boundaries'><i>interval boundaries</i></a>, shall satisfy the relation <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-msubsup MJXc-space3"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span></span></span></span></span> for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">i</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.plinear-2.sentence-1'>.</a></div> <div id='dist.samp.plinear-2.sentence-2' class='sentence'>Unless specified otherwise,
the remaining <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span> distribution parameters are calculated as
<span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</span></span></span></span></span></span></span></span> for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span>, in which the values <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span>,
commonly known as the <a class='hidden_link' href='#def:weights_at_boundaries' id='def:weights_at_boundaries'><i>weights at boundaries</i></a>, shall be non-negative, non-NaN, and non-infinity<a class='hidden_link' href='#dist.samp.plinear-2.sentence-2'>.</a></div> <div id='dist.samp.plinear-2.sentence-3' class='sentence'>Moreover, the following relation shall hold:
<br><span class='math'><span class="mjx-chtml MJXc-display" style="text-align: center;"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.032em;">S</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-mfrac MJXc-space3"><span class="mjx-box MJXc-stacked" style="width: 0.7em; padding: 0px 0.12em;"><span class="mjx-numerator" style="width: 0.7em; top: -1.368em;"><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><span class="mjx-denominator" style="width: 0.7em; bottom: -0.756em;"><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 style="border-bottom: 1.3px solid; top: -0.296em; width: 0.7em;" class="mjx-line"></span></span><span style="height: 2.124em; vertical-align: -0.756em;" class="mjx-vsize"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-munderover MJXc-space1"><span class="mjx-itable"><span class="mjx-row"><span class="mjx-cell"><span class="mjx-stack"><span class="mjx-over" style="font-size: 70.7%; padding-bottom: 0.176em; padding-top: 0.141em; padding-left: 0.082em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><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></span></span><span class="mjx-op"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-size2-R" style="padding-top: 0.74em; padding-bottom: 0.74em;">∑</span></span></span></span></span></span><span class="mjx-row"><span class="mjx-under" style="font-size: 70.7%; padding-top: 0.236em; padding-bottom: 0.141em; padding-left: 0.122em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span></span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><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></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-msubsup MJXc-space2"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.291em; padding-bottom: 0.372em;"> </span></span><a class="hidden_link" href="#dist.samp.plinear-2.sentence-3"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">.</span></span></a></span></span></span></span></div></div><div class='texpara'><span id='lib:piecewise_linear_distribution,result_type'><span id='lib:result_type,piecewise_linear_distribution'><span id='lib:piecewise_linear_distribution_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:piecewise_linear_distribution_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> RealType <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> piecewise_linear_distribution <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> result_type <span class='operator'>=</span> RealType;
    <span class='keyword'>using</span> param_type  <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// constructor and reset functions</span>
    <span class="added">constexpr </span>piecewise_linear_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIteratorB, <span class='keyword'>class</span> InputIteratorW<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>piecewise_linear_distribution<span class='parenthesis'>(</span>InputIteratorB firstB, InputIteratorB lastB,
                                    InputIteratorW firstW<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UnaryOperation<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>piecewise_linear_distribution<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>RealType<span class='anglebracket'>&gt;</span> bl, UnaryOperation fw<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UnaryOperation<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>piecewise_linear_distribution<span class='parenthesis'>(</span>size_t nw, RealType xmin, RealType xmax, UnaryOperation fw<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>explicit</span> piecewise_linear_distribution<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> reset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// equality operators</span>
    <span class="added">constexpr </span><span class='keyword'>friend</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='keyword'>const</span> piecewise_linear_distribution<span class='operator'>&amp;</span> x,
                           <span class='keyword'>const</span> piecewise_linear_distribution<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class='comment'>// generating functions</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> URBG<span class='anglebracket'>&gt;</span>
      <span class="added">constexpr </span>result_type <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>URBG<span class='operator'>&amp;</span> g, <span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;

    <span class='comment'>// property functions</span>
    <span class="added">constexpr </span>vector<span class='anglebracket'>&lt;</span>result_type<span class='anglebracket'>&gt;</span> intervals<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>vector<span class='anglebracket'>&lt;</span>result_type<span class='anglebracket'>&gt;</span> densities<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>param_type param<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span><span class='keyword'>void</span> param<span class='parenthesis'>(</span><span class='keyword'>const</span> param_type<span class='operator'>&amp;</span> parm<span class='parenthesis'>)</span>;
    <span class="added">constexpr </span>result_type min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added">constexpr </span>result_type max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// inserters and extractors</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>basic_ostream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> os, <span class='keyword'>const</span> piecewise_linear_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> traits<span class='anglebracket'>&gt;</span>
      <span class='keyword'>friend</span> basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>
        <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>basic_istream<span class='anglebracket'>&lt;</span>charT, traits<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> is, piecewise_linear_distribution<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div class='texpara'><div id='lib:piecewise_linear_distribution,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:piecewise_linear_distribution,constructor'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>piecewise_linear_distribution<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.samp.plinear-3'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.plinear-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6773'>#</a></div><div class='texpara'><div id='dist.samp.plinear-3.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>piecewise_<span class='shy'></span>linear_<span class='shy'></span>distribution</span> object
 with <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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;">1</span></span></span></span></span></span>,
 <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</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;">1</span></span></span></span></span></span>,
 <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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;">0</span></span></span></span></span></span>,
 and <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</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;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.plinear-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:piecewise_linear_distribution,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:piecewise_linear_distribution,constructor_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIteratorB, <span class='keyword'>class</span> InputIteratorW<span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>piecewise_linear_distribution<span class='parenthesis'>(</span>InputIteratorB firstB, InputIteratorB lastB,
                                InputIteratorW firstW<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.samp.plinear-4'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.plinear-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6790'>#</a></div><div class='texpara'><div id='dist.samp.plinear-4.sentence-1' class='sentence'><i >Mandates</i>: Both of
<ul class='itemize'><li id='dist.samp.plinear-4.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#dist.samp.plinear-4.1'>(4.1)</a></div><span class='texttt'>is_<span class='shy'></span>convertible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>iterator_<span class='shy'></span>traits<span class='anglebracket'>&lt;</span>InputIteratorB<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>value_<span class='shy'></span>type, <span class='keyword'>double</span><span class='anglebracket'>&gt;</span></span></li><li id='dist.samp.plinear-4.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#dist.samp.plinear-4.2'>(4.2)</a></div><span class='texttt'>is_<span class='shy'></span>convertible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>iterator_<span class='shy'></span>traits<span class='anglebracket'>&lt;</span>InputIteratorW<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>value_<span class='shy'></span>type, <span class='keyword'>double</span><span class='anglebracket'>&gt;</span></span></li></ul>
are <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#dist.samp.plinear-4.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.samp.plinear-5'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.plinear-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6799'>#</a></div><div class='texpara'><div id='dist.samp.plinear-5.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>InputIteratorB</span> and <span class='texttt'>InputIteratorW</span>
   each meet the
  <a href='input.iterators#:Cpp17InputIterator' title='24.3.5.3&emsp;Input iterators&emsp;[input.iterators]'><i >Cpp17InputIterator</i></a> requirements (<a href='input.iterators' title='24.3.5.3&emsp;Input iterators'>[input.<span class='shy'></span>iterators]</a>)<a class='hidden_link' href='#dist.samp.plinear-5.sentence-1'>.</a></div> <div id='dist.samp.plinear-5.sentence-2' class='sentence'>If <span class='texttt'>firstB <span class='operator'>=</span><span class='operator'>=</span> lastB</span>
 or <span class='texttt'><span class='operator'>+</span><span class='operator'>+</span>firstB <span class='operator'>=</span><span class='operator'>=</span> lastB</span>,
 let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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;">1</span></span></span></span></span></span>,
     <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</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;">1</span></span></span></span></span></span>,
     <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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;">0</span></span></span></span></span></span>,
 and <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</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;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.plinear-5.sentence-2'>.</a></div> <div id='dist.samp.plinear-5.sentence-3' class='sentence'>Otherwise,
 <span class='math'><span class='bigl'></span>[<span class='texttt'>firstB</span>, <span class='texttt'>lastB</span><span class='bigr'></span>)</span>
 forms a sequence <span class='math'><span class='mathalpha'>b</span></span> of length <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span>,
 the length of the sequence <span class='math'><span class='mathalpha'>w</span></span> starting from <span class='texttt'>firstW</span>
 is at least <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span>,
 and any <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span> for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.446em;">≥</span></span><span class="mjx-texatom MJXc-space3"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span> are ignored by the distribution<a class='hidden_link' href='#dist.samp.plinear-5.sentence-3'>.</a></div></div></div></div><div class='para' id='dist.samp.plinear-6'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.plinear-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6817'>#</a></div><div class='texpara'><div id='dist.samp.plinear-6.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>piecewise_<span class='shy'></span>linear_<span class='shy'></span>distribution</span> object
 with parameters as specified above<a class='hidden_link' href='#dist.samp.plinear-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:piecewise_linear_distribution,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:piecewise_linear_distribution,constructor__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UnaryOperation<span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>piecewise_linear_distribution<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>RealType<span class='anglebracket'>&gt;</span> bl, UnaryOperation fw<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.samp.plinear-7'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.plinear-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6831'>#</a></div><div class='texpara'><div id='dist.samp.plinear-7.sentence-1' class='sentence'><i >Mandates</i>: <span class='texttt'>is_<span class='shy'></span>invocable_<span class='shy'></span>r_<span class='shy'></span>v<span class='anglebracket'>&lt;</span><span class='keyword'>double</span>, UnaryOperation<span class='operator'>&amp;</span>, <span class='keyword'>double</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#dist.samp.plinear-7.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.samp.plinear-8'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.plinear-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6835'>#</a></div><div class='texpara'><div id='dist.samp.plinear-8.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>piecewise_<span class='shy'></span>linear_<span class='shy'></span>distribution</span> object
 with parameters taken or calculated
 from the following values:
 If <span class='math'><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.519em; padding-bottom: 0.372em;">bl<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</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></span>,
 let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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;">1</span></span></span></span></span></span>,
     <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</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;">1</span></span></span></span></span></span>,
     <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</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;">0</span></span></span></span></span></span>,
 and <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">1</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;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.plinear-8.sentence-1'>.</a></div> <div id='dist.samp.plinear-8.sentence-2' class='sentence'>Otherwise,
 let <span class='math'><span class='bigl'></span>[<span class='texttt'>bl<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,</span> <span class='texttt'>bl<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><span class='bigr'></span>)</span>
 form a sequence <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span></span></span>,
 and
 let <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">fw</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span><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></span>
 for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.plinear-8.sentence-2'>.</a></div></div></div></div><div class='para' id='dist.samp.plinear-9'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.plinear-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6852'>#</a></div><div class='texpara'><div id='dist.samp.plinear-9.sentence-1' class='sentence'><i >Complexity</i>: The number of invocations of <span class='texttt'>fw</span> does not exceed <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.plinear-9.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:piecewise_linear_distribution,constructor___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:piecewise_linear_distribution,constructor___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> UnaryOperation<span class='anglebracket'>&gt;</span>
  <span class="added">constexpr </span>piecewise_linear_distribution<span class='parenthesis'>(</span>size_t nw, RealType xmin, RealType xmax, UnaryOperation fw<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='dist.samp.plinear-10'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.plinear-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6865'>#</a></div><div class='texpara'><div id='dist.samp.plinear-10.sentence-1' class='sentence'><i >Mandates</i>: <span class='texttt'>is_<span class='shy'></span>invocable_<span class='shy'></span>r_<span class='shy'></span>v<span class='anglebracket'>&lt;</span><span class='keyword'>double</span>, UnaryOperation<span class='operator'>&amp;</span>, <span class='keyword'>double</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#dist.samp.plinear-10.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.samp.plinear-11'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.plinear-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6869'>#</a></div><div class='texpara'><div id='dist.samp.plinear-11.sentence-1' class='sentence'><i >Preconditions</i>: If <span class='math'><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.225em; padding-bottom: 0.298em;">nw</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></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;">0</span></span></span></span></span></span>, let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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;">1</span></span></span></span></span></span>, otherwise let <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">nw</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.plinear-11.sentence-1'>.</a></div> <div id='dist.samp.plinear-11.sentence-2' class='sentence'>The relation <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">0</span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.372em;">&lt;</span></span><span class="mjx-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.007em;">δ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></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-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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.225em; padding-bottom: 0.298em;">xmax</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-texatom MJXc-space2"><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;">xmin</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span>
 holds<a class='hidden_link' href='#dist.samp.plinear-11.sentence-2'>.</a></div></div></div></div><div class='para' id='dist.samp.plinear-12'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.plinear-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6875'>#</a></div><div class='texpara'><div id='dist.samp.plinear-12.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>piecewise_<span class='shy'></span>linear_<span class='shy'></span>distribution</span> object
 with parameters taken or calculated
 from the following values:
 Let <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-texatom MJXc-space3"><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;">xmin</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mi MJXc-space2"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.004em; padding-bottom: 0.298em;">⋅</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.007em;">δ</span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span></span></span></span> for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span>,
 and <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">w</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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-texatom MJXc-space3"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">fw</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span><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></span> for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.plinear-12.sentence-1'>.</a></div></div></div></div><div class='para' id='dist.samp.plinear-13'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.plinear-13'>13</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6883'>#</a></div><div class='texpara'><div id='dist.samp.plinear-13.sentence-1' class='sentence'><i >Complexity</i>: The number of invocations of <span class='texttt'>fw</span> does not exceed <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.plinear-13.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:piecewise_linear_distribution,intervals'><div id='lib:intervals,piecewise_linear_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:intervals,piecewise_linear_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>vector<span class='anglebracket'>&lt;</span>result_type<span class='anglebracket'>&gt;</span> intervals<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.samp.plinear-14'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.plinear-14'>14</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6894'>#</a></div><div class='texpara'><div id='dist.samp.plinear-14.sentence-1' class='sentence'><i >Returns</i>: A <span class='texttt'>vector<span class='anglebracket'>&lt;</span>result_<span class='shy'></span>type<span class='anglebracket'>&gt;</span></span>
 whose <span class='texttt'>size</span> member returns <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">+</span></span><span class="mjx-mn MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span>
 and whose <span class='math'><span class='texttt'><span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span></span></span> member returns <span class='math'><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span>
 when invoked with argument <span class='math'><span class='mathalpha'>k</span></span> for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.plinear-14.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:piecewise_linear_distribution,densities'><div id='lib:densities,piecewise_linear_distribution'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:densities,piecewise_linear_distribution'>🔗</a></div><code class='itemdeclcode'><span class="added">constexpr </span>vector<span class='anglebracket'>&lt;</span>result_type<span class='anglebracket'>&gt;</span> densities<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='dist.samp.plinear-15'><div class='marginalizedparent'><a class='marginalized' href='#dist.samp.plinear-15'>15</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6908'>#</a></div><div class='texpara'><div id='dist.samp.plinear-15.sentence-1' class='sentence'><i >Returns</i>: A <span class='texttt'>vector<span class='anglebracket'>&lt;</span>result_<span class='shy'></span>type<span class='anglebracket'>&gt;</span></span>
 whose <span class='texttt'>size</span> member returns <span class='math'><span class='mathalpha'>n</span></span>
 and whose <span class='math'><span class='texttt'><span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span></span></span> member returns <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em;">ρ</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.219em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</span></span></span></span></span></span></span></span>
 when invoked with argument <span class='math'><span class='mathalpha'>k</span></span> for <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">k</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;">0</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span><a class='hidden_link' href='#dist.samp.plinear-15.sentence-1'>.</a></div></div></div></div><div class='texpara'></div></div></div></div><div id='c.math.rand' class='section'><h3 ><a class='secnum' href='#c.math.rand' style='min-width:80pt'>29.5.10</a> Low-quality random number generation <a class='abbr_ref' href='c.math.rand'>[c.math.rand]</a></h3><div class='para nonNormativeOnly' id='c.math.rand-1'><div class='marginalizedparent'><a class='marginalized' href='#c.math.rand-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6922'>#</a></div><div class='texpara'><div id='c.math.rand-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#c.math.rand-note-1'>1</a></i>:&ensp;<div id='c.math.rand-1.sentence-1' class='sentence'>The header <a href='cstdlib.syn#header:%3ccstdlib%3e' title='17.2.2&emsp;Header &lt;cstdlib&gt; synopsis&emsp;[cstdlib.syn]'><span id='headerref:<cstdlib>'><span class='texttt'>&lt;cstdlib&gt;</span></span></a>
declares the functions described in this subclause<a class='hidden_link' href='#c.math.rand-1.sentence-1'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='texpara'><div id='lib:srand'><div id='lib:rand'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:rand'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>int</span> rand<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>void</span> srand<span class='parenthesis'>(</span><span class='keyword'>unsigned</span> <span class='keyword'>int</span> seed<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='c.math.rand-2'><div class='marginalizedparent'><a class='marginalized' href='#c.math.rand-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6936'>#</a></div><div class='texpara'><div id='c.math.rand-2.sentence-1' class='sentence'><i >Effects</i>: The
<span class='texttt'>rand</span> and <span class='texttt'>srand</span>
functions have the semantics specified in the C standard library<a class='hidden_link' href='#c.math.rand-2.sentence-1'>.</a></div></div></div></div><div class='para' id='c.math.rand-3'><div class='marginalizedparent'><a class='marginalized' href='#c.math.rand-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/0d2306f776e6f90c35b6bb80873f215ebaf081ea/source/numerics.tex#L6942'>#</a></div><div class='texpara'><div id='c.math.rand-3.sentence-1' class='sentence'><i >Remarks</i>: The implementation
may specify that particular library functions may call
<span class='texttt'>rand</span><a class='hidden_link' href='#c.math.rand-3.sentence-1'>.</a></div> <div id='c.math.rand-3.sentence-2' class='sentence'>It is <a class='index' id=':whether_rand_may_introduce_a_data_race'></a>implementation-defined
whether the <span class='texttt'>rand</span> function
may introduce data races (<a href='res.on.data.races' title='16.4.6.10&emsp;Data race avoidance'>[res.<span class='shy'></span>on.<span class='shy'></span>data.<span class='shy'></span>races]</a>)<a class='hidden_link' href='#c.math.rand-3.sentence-2'>.</a></div> <div id='c.math.rand-note-2' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#c.math.rand-note-2'>2</a></i>:&ensp;<div id='c.math.rand-3.sentence-3' class='sentence'><a class='index' id='lib:rand,discouraged'></a>The other random
number generation facilities in this document ([rand]) are often preferable
to <span class='texttt'>rand</span>, because <span class='texttt'>rand</span>'s underlying algorithm is unspecified<a class='hidden_link' href='#c.math.rand-3.sentence-3'>.</a></div> <div id='c.math.rand-3.sentence-4' class='sentence'>Use of <span class='texttt'>rand</span> therefore continues to be non-portable, with unpredictable
and oft-questionable quality and performance<a class='hidden_link' href='#c.math.rand-3.sentence-4'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div><div class='texpara'><div id='c.math.rand-sentence-1' class='sentence'><span class='textsc'>See also:</span> ISO/IEC 9899:2018, 7.22.2</div></div><div class='texpara'></div></div>
</div>
<div class="wording context">
</section><section data-related="feature-test-macros"><h3><a href="#feature-test-macros" id="feature-test-macros">Feature test macros</a></h3><h4><a href="http://eel.is/c++draft/cpp.predefined">17.3.2 Header &lt;version&gt; synopsis [version.syn]</a></h4><div class="para"><pre><code><div class="added">#define __cpp_lib_constexpr_random 20????L          // also in &lt;random&gt; and &lt;algorithm&gt;</div></code></pre></div>

</div></section></section></article>

<script>
	const all_changes = document.querySelectorAll(".wording .added, .wording .removed, .wording .change");
	let position = null;
	
	function set_hash(id) {
		const elem = document.getElementById(id);
		if (elem) {
			elem.id = `${id}-tmp`;
		}
		window.location.hash = id;
		if (elem) {
			elem.id = id;
		}
		return elem;
	}
	
	function disable_highlight_on_previous() {
		if (position != null) {
			//window.location.href.match(/([^#]++)#.++/);
			//window.location.
			set_hash("no-change-selected");
			// hljs is messing with me
			document.getElementById(all_changes[position].id).classList.remove("selected-current");
		}
	}
	
	function scroll_into_view_if_needed(el, scroll_there = true) {
		if (scroll_there) {
			if (!element_is_visible_in_viewport(el)) {
				el.scrollIntoView({behavior: "smooth", block: "center", inline: "center" });
			} else {
				console.log("doesn't need to scroll?!");
			}
		}
		
		return el;
	}
	
	function highlight_index(i = null, scroll_there = true) {
		if (position !== null && i === position) {
			console.log(`disabling overlay: ${i} === ${position}`);
			disable_highlight_on_previous();
			let overlay = document.querySelector("#overlay");
			overlay.remove();
			position = null;
			return;
		}
		
		if (i !== null) {
			disable_highlight_on_previous();
			position = i;
		}
		
		
		let overlay = document.querySelector("#overlay");
		if (!overlay) {
			let overlay = document.createElement("div");
			overlay.id = "overlay";
			document.querySelector("body").appendChild(overlay);
		}
		
		set_hash(`change-${position}`);
		
		
		const current = document.getElementById(all_changes[position].id);
		current.classList.add("selected-current");
		const scroll_anchor = current.querySelector(".scroll-here")
		
		if (scroll_anchor) {
			return scroll_into_view_if_needed(scroll_anchor, scroll_there);
		}
		
		return scroll_into_view_if_needed(current, scroll_there);
	}
	
	function element_is_visible_in_viewport(el) {
	  const { top, left, bottom, right } = el.getBoundingClientRect();
	  const { innerHeight, innerWidth } = window;
		const zoneHeight = innerHeight/5;
		const zoneWidth = innerWidth/5;
		
	  return top >= zoneHeight && bottom <= (innerHeight-zoneHeight);
	};
	
	all_changes.forEach((e, i) => {
		e.style.cursor = "pointer";
		e.id = `change-${i}-real`;
		e.onclick = (ev) => {
			current = highlight_index(i);
			
			ev.alreadyProcessed = true;
		}
	});
	
	document.body.onclick = (ev) => {
		if (position !== null && !ev.alreadyProcessed) {
			highlight_index(position, false);
		}
	};
	
	function next_or_previous_change(step) {
		disable_highlight_on_previous();

		const first = 0;
		const last =  all_changes.length - 1;
		
		if (position === null) {
			if (step < 0) {
				position = last;
			} else if (step > 0) {
				position = first;
			}
		} else {
			position += step;
		}
		
		if (position >= all_changes.length) {
			position = first;
		} else if (position < 0) {
			position = last;
		}
		highlight_index();
	}
	
	
	set_hash(window.location.hash);
	
	window.addEventListener("load", function () {
		const active_change = window.location.hash.match(/change-(?<id>[0-9]+)/);
		if (active_change) {
			const el = highlight_index(Number(active_change[1]), false);
			//console.log("scrolling there!");
			el.scrollIntoView({behavior: "instant", block: "center", inline: "center" });
		}
		window.setTimeout(() => {
			document.querySelector("html").style["scroll-behavior"] = "smooth";
		}, 500);
	});
	
	window.addEventListener("keydown", function (e) {
		if ((e.altKey) && e.code == "ArrowRight") {
			next_or_previous_change(1);
		} else if (position != null && e.code == "ArrowRight") {
			next_or_previous_change(1);
		} else if ((e.altKey) && e.code == "ArrowLeft") {
			next_or_previous_change(-1);
		} else if (position != null && e.code == "ArrowLeft") {
			next_or_previous_change(-1);
		} else if ((e.altKey) && e.code == "KeyF") {
			document.documentElement.requestFullscreen();
		}
	});
	
	const hide_button = document.getElementById("hide");
	hide_button.onclick = (e) => {
		if (hide_button.classList.contains("enabled")) {
			hide_button.classList.remove("enabled");
		} else {
			hide_button.classList.add("enabled");
		}
	};
	
	function navigate(e, elem) {
		//e.preventDefault();
		//return true;
		const target = elem.getAttribute("href");
		history.pushState(null, null, target);
		const target_element = document.getElementById(target.substr(1));
	}
	
	window.setTimeout(() => document.querySelector("article").classList.add("transitionable"), 500);
	
	document.querySelectorAll("a[href^=\"#\"]").forEach((elem) => { elem.onclick = (e) => navigate(e, elem); } );
	
	function send_email(link) {
		const [prefix, encoded] = link.getAttribute("href").split("#",2);
		window.location = "mailto:"+window.atob(encoded);
		return false;
	}
	
	document.querySelectorAll("a").forEach(link => {
		const relative = link.getAttribute("href");
		if (relative && !relative.startsWith("#") && !relative.startsWith("http://") && !relative.startsWith("https://")) {
			link.href= `https://eel.is/c++draft/${relative}`;
		}
		
	})
	
	const current_url = new URL(window.location.href);
	
	const replace_url_with_current_setting = () => {
    window.history.replaceState({path:current_url.toString()},'', current_url.toString());
	};
	
	const update_poll_dependencies = (poll_id, value) => {
		const selection = document.querySelectorAll(`span.poll_value[x-poll-id="${poll_id}"]`);
		selection.forEach((el) => {
			el.innerText = value;
		});
		
		const discardable = document.querySelectorAll(`.poll_condition[x-poll-id="${poll_id}"]`);
		discardable.forEach((el) => {
			if (el.getAttribute("x-poll-value") == value) {
				el.classList.remove("discard");
			} else {
				el.classList.add("discard");
			}
		});
	}

	const change_poll_dependencies = (poll_id, object) => {
		console.log(`changing poll ${poll_id} dependecies to value ${object.value}`);
		const value = object.value;
		update_poll_dependencies(poll_id, value);
		current_url.searchParams.set(`poll_${poll_id}`, value);
		replace_url_with_current_setting();
	};
	
	
	for (const [key, value] of current_url.searchParams) {
		const m = key.match(/poll_([a-z\-]+)/);
		console.log(`search params = ${key}=${value}`);
		const name = m?.[1];
		if (name) {
			const selection = document.querySelector(`input[type="radio"][name="${name}"][value="${value}"]:not([disabled])`);
			if (selection) {
				update_poll_dependencies(name, value);
				selection.checked = true;
			} else {
				console.error(`poll query variable! ${name}=${value}`);
			}
		}
	}
</script>

<!-- init-hljs.js -->
<script>
// trim must be first, before merge
hljs.addPlugin(trimNicely);
hljs.addPlugin(mergeHTMLPlugin);
hljs.highlightAll();

</script>
</body>
</html>
