Xorshift (133962B)
1 <!DOCTYPE html> 2 <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-zebra-design-disabled vector-feature-custom-font-size-clientpref-0 vector-feature-client-preferences-disabled vector-feature-typography-survey-disabled vector-toc-available" lang="en" dir="ltr"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Xorshift - Wikipedia</title> 6 <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-zebra-design-disabled vector-feature-custom-font-size-clientpref-0 vector-feature-client-preferences-disabled vector-feature-typography-survey-disabled vector-toc-available";var cookie=document.cookie.match(/(?:^|; )enwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""], 7 "wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"5fc1186c-12f1-4e7d-b82c-9c11f248c914","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Xorshift","wgTitle":"Xorshift","wgCurRevisionId":1177332258,"wgRevisionId":1177332258,"wgArticleId":17099722,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Articles with short description","Short description is different from Wikidata","Articles with example C code","Pseudorandom number generators"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Xorshift","wgRelevantArticleId":17099722,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgFlaggedRevsParams":{"tags": 8 {"status":{"levels":1}}},"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":6,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":20000,"wgULSCurrentAutonym":"English","wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q2576999","wgCheckUserClientHintsHeadersJsApi":["architecture","bitness","brands","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"skins.vector.user.styles":"ready","ext.globalCssJs.user.styles":"ready", 9 "site.styles":"ready","user.styles":"ready","skins.vector.user":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","codex-search-styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","mediawiki.page.media","site","mediawiki.page.ready","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.ReferenceTooltips","ext.gadget.switcher","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.head","mmv.bootstrap.autostart","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.compactlinks","ext.uls.interface", 10 "ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.growthExperiments.SuggestedEditSession"];</script> 11 <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); 12 }];});});</script> 13 <link rel="stylesheet" href="/w/load.php?lang=en&modules=codex-search-styles%7Cext.cite.styles%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cskins.vector.icons%2Cstyles%7Cwikibase.client.init&only=styles&skin=vector-2022"> 14 <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> 15 <meta name="ResourceLoaderDynamicStyles" content=""> 16 <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> 17 <meta name="generator" content="MediaWiki 1.42.0-wmf.5"> 18 <meta name="referrer" content="origin"> 19 <meta name="referrer" content="origin-when-cross-origin"> 20 <meta name="robots" content="max-image-preview:standard"> 21 <meta name="format-detection" content="telephone=no"> 22 <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/e/ee/Xorshift.png"> 23 <meta property="og:image:width" content="1200"> 24 <meta property="og:image:height" content="1200"> 25 <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/e/ee/Xorshift.png/800px-Xorshift.png"> 26 <meta property="og:image:width" content="800"> 27 <meta property="og:image:height" content="800"> 28 <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/e/ee/Xorshift.png/640px-Xorshift.png"> 29 <meta property="og:image:width" content="640"> 30 <meta property="og:image:height" content="640"> 31 <meta name="viewport" content="width=1000"> 32 <meta property="og:title" content="Xorshift - Wikipedia"> 33 <meta property="og:type" content="website"> 34 <link rel="preconnect" href="//upload.wikimedia.org"> 35 <link rel="alternate" media="only screen and (max-width: 720px)" href="//en.m.wikipedia.org/wiki/Xorshift"> 36 <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/w/index.php?title=Xorshift&action=edit"> 37 <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> 38 <link rel="icon" href="/static/favicon/wikipedia.ico"> 39 <link rel="search" type="application/opensearchdescription+xml" href="/w/opensearch_desc.php" title="Wikipedia (en)"> 40 <link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd"> 41 <link rel="canonical" href="https://en.wikipedia.org/wiki/Xorshift"> 42 <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> 43 <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> 44 <link rel="dns-prefetch" href="//meta.wikimedia.org" /> 45 <link rel="dns-prefetch" href="//login.wikimedia.org"> 46 </head> 47 <body class="skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Xorshift rootpage-Xorshift skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> 48 <div class="vector-header-container"> 49 <header class="vector-header mw-header"> 50 <div class="vector-header-start"> 51 <nav class="vector-main-menu-landmark" aria-label="Site" role="navigation"> 52 53 <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > 54 <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > 55 <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> 56 57 <span class="vector-dropdown-label-text">Main menu</span> 58 </label> 59 <div class="vector-dropdown-content"> 60 61 62 <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> 63 64 <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> 65 <div 66 class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" 67 data-feature-name="main-menu-pinned" 68 data-pinnable-element-id="vector-main-menu" 69 data-pinned-container-id="vector-main-menu-pinned-container" 70 data-unpinned-container-id="vector-main-menu-unpinned-container" 71 > 72 <div class="vector-pinnable-header-label">Main menu</div> 73 <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> 74 <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> 75 </div> 76 77 78 <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > 79 <div class="vector-menu-heading"> 80 Navigation 81 </div> 82 <div class="vector-menu-content"> 83 84 <ul class="vector-menu-content-list"> 85 86 <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li><li id="n-sitesupport" class="mw-list-item"><a href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en" title="Support us by donating to the Wikimedia Foundation"><span>Donate</span></a></li> 87 </ul> 88 89 </div> 90 </div> 91 92 93 94 <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > 95 <div class="vector-menu-heading"> 96 Contribute 97 </div> 98 <div class="vector-menu-content"> 99 100 <ul class="vector-menu-content-list"> 101 102 <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li> 103 </ul> 104 105 </div> 106 </div> 107 108 109 <div class="vector-main-menu-action vector-main-menu-action-lang-alert"> 110 <div class="vector-main-menu-action-item"> 111 <div class="vector-main-menu-action-heading vector-menu-heading">Languages</div> 112 <div class="vector-main-menu-action-content vector-menu-content"> 113 <div class="mw-message-box cdx-message cdx-message--block mw-message-box-notice cdx-message--notice vector-language-sidebar-alert"><span class="cdx-message__icon"></span><div class="cdx-message__content">Language links are at the top of the page across from the title.</div></div> 114 </div> 115 </div> 116 </div> 117 118 </div> 119 120 </div> 121 122 </div> 123 </div> 124 125 </nav> 126 127 <a href="/wiki/Main_Page" class="mw-logo"> 128 <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> 129 <span class="mw-logo-container"> 130 <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> 131 <img class="mw-logo-tagline" alt="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> 132 </span> 133 </a> 134 135 </div> 136 <div class="vector-header-end"> 137 138 <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> 139 <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" id="" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> 140 141 <span>Search</span> 142 </a> 143 <div class="vector-typeahead-search-container"> 144 <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> 145 <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> 146 <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> 147 <div class="cdx-text-input cdx-text-input--has-start-icon"> 148 <input 149 class="cdx-text-input__input" 150 type="search" name="search" placeholder="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search Wikipedia [f]" accesskey="f" id="searchInput" 151 > 152 <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> 153 </div> 154 <input type="hidden" name="title" value="Special:Search"> 155 </div> 156 <button class="cdx-button cdx-search-input__end-button">Search</button> 157 </form> 158 </div> 159 </div> 160 </div> 161 162 <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools" role="navigation" > 163 <div class="vector-user-links-main"> 164 165 <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > 166 <div class="vector-menu-content"> 167 168 <ul class="vector-menu-content-list"> 169 170 171 </ul> 172 173 </div> 174 </div> 175 176 177 <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > 178 <div class="vector-menu-content"> 179 180 <ul class="vector-menu-content-list"> 181 182 183 </ul> 184 185 </div> 186 </div> 187 188 189 <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > 190 <div class="vector-menu-content"> 191 192 <ul class="vector-menu-content-list"> 193 194 195 </ul> 196 197 </div> 198 </div> 199 200 201 <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > 202 <div class="vector-menu-content"> 203 204 <ul class="vector-menu-content-list"> 205 <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&returnto=Xorshift" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> 206 </li> 207 <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=Xorshift" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o" class=""><span>Log in</span></a> 208 </li> 209 210 211 </ul> 212 213 </div> 214 </div> 215 216 </div> 217 218 <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Log in and more options" > 219 <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > 220 <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> 221 222 <span class="vector-dropdown-label-text">Personal tools</span> 223 </label> 224 <div class="vector-dropdown-content"> 225 226 227 228 <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > 229 <div class="vector-menu-content"> 230 231 <ul class="vector-menu-content-list"> 232 233 <li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=Xorshift" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=Xorshift" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> 234 </ul> 235 236 </div> 237 </div> 238 239 <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > 240 <div class="vector-menu-heading"> 241 Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> 242 </div> 243 <div class="vector-menu-content"> 244 245 <ul class="vector-menu-content-list"> 246 247 <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> 248 </ul> 249 250 </div> 251 </div> 252 253 254 </div> 255 </div> 256 257 </nav> 258 259 </div> 260 </header> 261 </div> 262 <div class="mw-page-container"> 263 <div class="mw-page-container-inner"> 264 <div class="vector-sitenotice-container"> 265 <div id="siteNotice"><!-- CentralNotice --></div> 266 </div> 267 268 <div class="vector-main-menu-container"> 269 <div id="mw-navigation"> 270 <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site" role="navigation"> 271 <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> 272 273 </div> 274 </nav> 275 </div> 276 </div> 277 <nav id="mw-panel-toc" role="navigation" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark vector-sticky-pinned-container"> 278 <div id="vector-toc-pinned-container" class="vector-pinned-container"> 279 <div id="vector-toc" class="vector-toc vector-pinnable-element"> 280 <div 281 class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" 282 data-feature-name="toc-pinned" 283 data-pinnable-element-id="vector-toc" 284 285 286 > 287 <h2 class="vector-pinnable-header-label">Contents</h2> 288 <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> 289 <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> 290 </div> 291 292 293 <ul class="vector-toc-contents" id="mw-panel-toc-list"> 294 <li id="toc-mw-content-text" 295 class="vector-toc-list-item vector-toc-level-1"> 296 <a href="#" class="vector-toc-link"> 297 <div class="vector-toc-text">(Top)</div> 298 </a> 299 </li> 300 <li id="toc-Example_implementation" 301 class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> 302 <a class="vector-toc-link" href="#Example_implementation"> 303 <div class="vector-toc-text"> 304 <span class="vector-toc-numb">1</span>Example implementation</div> 305 </a> 306 307 <ul id="toc-Example_implementation-sublist" class="vector-toc-list"> 308 </ul> 309 </li> 310 <li id="toc-Non-linear_variations" 311 class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> 312 <a class="vector-toc-link" href="#Non-linear_variations"> 313 <div class="vector-toc-text"> 314 <span class="vector-toc-numb">2</span>Non-linear variations</div> 315 </a> 316 317 <button aria-controls="toc-Non-linear_variations-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> 318 <span class="vector-icon vector-icon--x-small mw-ui-icon-wikimedia-expand"></span> 319 <span>Toggle Non-linear variations subsection</span> 320 </button> 321 322 <ul id="toc-Non-linear_variations-sublist" class="vector-toc-list"> 323 <li id="toc-xorwow" 324 class="vector-toc-list-item vector-toc-level-2"> 325 <a class="vector-toc-link" href="#xorwow"> 326 <div class="vector-toc-text"> 327 <span class="vector-toc-numb">2.1</span>xorwow</div> 328 </a> 329 330 <ul id="toc-xorwow-sublist" class="vector-toc-list"> 331 </ul> 332 </li> 333 <li id="toc-xorshift*" 334 class="vector-toc-list-item vector-toc-level-2"> 335 <a class="vector-toc-link" href="#xorshift*"> 336 <div class="vector-toc-text"> 337 <span class="vector-toc-numb">2.2</span>xorshift*</div> 338 </a> 339 340 <ul id="toc-xorshift*-sublist" class="vector-toc-list"> 341 </ul> 342 </li> 343 <li id="toc-xorshift+" 344 class="vector-toc-list-item vector-toc-level-2"> 345 <a class="vector-toc-link" href="#xorshift+"> 346 <div class="vector-toc-text"> 347 <span class="vector-toc-numb">2.3</span>xorshift+</div> 348 </a> 349 350 <ul id="toc-xorshift+-sublist" class="vector-toc-list"> 351 </ul> 352 </li> 353 </ul> 354 </li> 355 <li id="toc-xoshiro" 356 class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> 357 <a class="vector-toc-link" href="#xoshiro"> 358 <div class="vector-toc-text"> 359 <span class="vector-toc-numb">3</span>xoshiro</div> 360 </a> 361 362 <button aria-controls="toc-xoshiro-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> 363 <span class="vector-icon vector-icon--x-small mw-ui-icon-wikimedia-expand"></span> 364 <span>Toggle xoshiro subsection</span> 365 </button> 366 367 <ul id="toc-xoshiro-sublist" class="vector-toc-list"> 368 <li id="toc-xoshiro256**" 369 class="vector-toc-list-item vector-toc-level-2"> 370 <a class="vector-toc-link" href="#xoshiro256**"> 371 <div class="vector-toc-text"> 372 <span class="vector-toc-numb">3.1</span>xoshiro256**</div> 373 </a> 374 375 <ul id="toc-xoshiro256**-sublist" class="vector-toc-list"> 376 </ul> 377 </li> 378 <li id="toc-xoshiro256+" 379 class="vector-toc-list-item vector-toc-level-2"> 380 <a class="vector-toc-link" href="#xoshiro256+"> 381 <div class="vector-toc-text"> 382 <span class="vector-toc-numb">3.2</span>xoshiro256+</div> 383 </a> 384 385 <ul id="toc-xoshiro256+-sublist" class="vector-toc-list"> 386 </ul> 387 </li> 388 <li id="toc-xoroshiro" 389 class="vector-toc-list-item vector-toc-level-2"> 390 <a class="vector-toc-link" href="#xoroshiro"> 391 <div class="vector-toc-text"> 392 <span class="vector-toc-numb">3.3</span>xoroshiro</div> 393 </a> 394 395 <ul id="toc-xoroshiro-sublist" class="vector-toc-list"> 396 </ul> 397 </li> 398 </ul> 399 </li> 400 <li id="toc-Initialization" 401 class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> 402 <a class="vector-toc-link" href="#Initialization"> 403 <div class="vector-toc-text"> 404 <span class="vector-toc-numb">4</span>Initialization</div> 405 </a> 406 407 <ul id="toc-Initialization-sublist" class="vector-toc-list"> 408 </ul> 409 </li> 410 <li id="toc-Notes" 411 class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> 412 <a class="vector-toc-link" href="#Notes"> 413 <div class="vector-toc-text"> 414 <span class="vector-toc-numb">5</span>Notes</div> 415 </a> 416 417 <ul id="toc-Notes-sublist" class="vector-toc-list"> 418 </ul> 419 </li> 420 <li id="toc-References" 421 class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> 422 <a class="vector-toc-link" href="#References"> 423 <div class="vector-toc-text"> 424 <span class="vector-toc-numb">6</span>References</div> 425 </a> 426 427 <ul id="toc-References-sublist" class="vector-toc-list"> 428 </ul> 429 </li> 430 <li id="toc-Further_reading" 431 class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> 432 <a class="vector-toc-link" href="#Further_reading"> 433 <div class="vector-toc-text"> 434 <span class="vector-toc-numb">7</span>Further reading</div> 435 </a> 436 437 <ul id="toc-Further_reading-sublist" class="vector-toc-list"> 438 </ul> 439 </li> 440 </ul> 441 </div> 442 443 </div> 444 </nav> 445 446 <div class="mw-content-container"> 447 <main id="content" class="mw-body" role="main"> 448 <header class="mw-body-header vector-page-titlebar"> 449 <nav role="navigation" aria-label="Contents" class="vector-toc-landmark"> 450 451 <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > 452 <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > 453 <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> 454 455 <span class="vector-dropdown-label-text">Toggle the table of contents</span> 456 </label> 457 <div class="vector-dropdown-content"> 458 459 460 <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> 461 </div> 462 463 </div> 464 </div> 465 466 </nav> 467 <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Xorshift</span></h1> 468 469 <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > 470 <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 4 languages" > 471 <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-4" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> 472 473 <span class="vector-dropdown-label-text">4 languages</span> 474 </label> 475 <div class="vector-dropdown-content"> 476 477 <div class="vector-menu-content"> 478 479 <ul class="vector-menu-content-list"> 480 481 <li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/Xorshift" title="Xorshift – German" lang="de" hreflang="de" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/Xorshift" title="Xorshift – Japanese" lang="ja" hreflang="ja" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/Xorshift" title="Xorshift – Portuguese" lang="pt" hreflang="pt" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/Xorshift" title="Xorshift – Russian" lang="ru" hreflang="ru" class="interlanguage-link-target"><span>Русский</span></a></li> 482 </ul> 483 <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q2576999#sitelinks-wikipedia" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> 484 </div> 485 486 </div> 487 </div> 488 </header> 489 <div class="vector-page-toolbar"> 490 <div class="vector-page-toolbar-container"> 491 <div id="left-navigation"> 492 <nav aria-label="Namespaces"> 493 494 <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > 495 <div class="vector-menu-content"> 496 497 <ul class="vector-menu-content-list"> 498 499 <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Xorshift" title="View the content page [c]" accesskey="c"><span>Article</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:Xorshift" rel="discussion" title="Discuss improvements to the content page [t]" accesskey="t"><span>Talk</span></a></li> 500 </ul> 501 502 </div> 503 </div> 504 505 506 <div id="p-variants" class="vector-dropdown emptyPortlet" > 507 <input type="checkbox" id="p-variants-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-variants" class="vector-dropdown-checkbox " aria-label="Change language variant" > 508 <label id="p-variants-label" for="p-variants-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> 509 </label> 510 <div class="vector-dropdown-content"> 511 512 513 514 <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > 515 <div class="vector-menu-content"> 516 517 <ul class="vector-menu-content-list"> 518 519 520 </ul> 521 522 </div> 523 </div> 524 525 526 </div> 527 </div> 528 529 </nav> 530 </div> 531 <div id="right-navigation" class="vector-collapsible"> 532 <nav aria-label="Views"> 533 534 <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > 535 <div class="vector-menu-content"> 536 537 <ul class="vector-menu-content-list"> 538 539 <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Xorshift"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Xorshift&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Xorshift&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> 540 </ul> 541 542 </div> 543 </div> 544 545 </nav> 546 547 <nav class="vector-page-tools-landmark" aria-label="Page tools"> 548 549 <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > 550 <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > 551 <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> 552 </label> 553 <div class="vector-dropdown-content"> 554 555 556 <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> 557 558 <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> 559 <div 560 class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" 561 data-feature-name="page-tools-pinned" 562 data-pinnable-element-id="vector-page-tools" 563 data-pinned-container-id="vector-page-tools-pinned-container" 564 data-unpinned-container-id="vector-page-tools-unpinned-container" 565 > 566 <div class="vector-pinnable-header-label">Tools</div> 567 <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> 568 <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> 569 </div> 570 571 572 <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > 573 <div class="vector-menu-heading"> 574 Actions 575 </div> 576 <div class="vector-menu-content"> 577 578 <ul class="vector-menu-content-list"> 579 580 <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Xorshift"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Xorshift&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Xorshift&action=history"><span>View history</span></a></li> 581 </ul> 582 583 </div> 584 </div> 585 586 <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > 587 <div class="vector-menu-heading"> 588 General 589 </div> 590 <div class="vector-menu-content"> 591 592 <ul class="vector-menu-content-list"> 593 594 <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Xorshift" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Xorshift" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Xorshift&oldid=1177332258" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Xorshift&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&page=Xorshift&id=1177332258&wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FXorshift"><span>Get shortened URL</span></a></li><li id="t-wikibase" class="mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q2576999" title="Structured data on this page hosted by Wikidata [g]" accesskey="g"><span>Wikidata item</span></a></li> 595 </ul> 596 597 </div> 598 </div> 599 600 <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > 601 <div class="vector-menu-heading"> 602 Print/export 603 </div> 604 <div class="vector-menu-content"> 605 606 <ul class="vector-menu-content-list"> 607 608 <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=Xorshift&action=show-download-screen" title="Download this page as a PDF file"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Xorshift&printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> 609 </ul> 610 611 </div> 612 </div> 613 614 </div> 615 616 </div> 617 618 </div> 619 </div> 620 621 </nav> 622 </div> 623 </div> 624 </div> 625 <div class="vector-column-end"> 626 <nav class="vector-page-tools-landmark vector-sticky-pinned-container" aria-label="Page tools"> 627 <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> 628 629 </div> 630 </nav> 631 </div> 632 <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> 633 <div class="vector-body-before-content"> 634 <div class="mw-indicators"> 635 </div> 636 637 <div id="siteSub" class="noprint">From Wikipedia, the free encyclopedia</div> 638 </div> 639 <div id="contentSub"><div id="mw-content-subtitle"></div></div> 640 641 642 <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">Class of pseudorandom number generators</div> 643 <figure class="mw-default-size mw-halign-right" typeof="mw:File/Thumb"><a href="/wiki/File:Xorshift.png" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/e/ee/Xorshift.png/220px-Xorshift.png" decoding="async" width="220" height="220" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/e/ee/Xorshift.png/330px-Xorshift.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/ee/Xorshift.png/440px-Xorshift.png 2x" data-file-width="1024" data-file-height="1024" /></a><figcaption>Example random distribution of Xorshift128</figcaption></figure> 644 <p><b>Xorshift</b> random number generators, also called <b>shift-register generators</b>, are a class of <a href="/wiki/Pseudorandom_number_generator" title="Pseudorandom number generator">pseudorandom number generators</a> that were invented by <a href="/wiki/George_Marsaglia" title="George Marsaglia">George Marsaglia</a>.<sup id="cite_ref-marsaglia_1-0" class="reference"><a href="#cite_note-marsaglia-1">[1]</a></sup> They are a subset of <a href="/wiki/Linear-feedback_shift_register" title="Linear-feedback shift register">linear-feedback shift registers</a> (LFSRs) which allow a particularly efficient implementation in software without the excessive use of <a href="/wiki/Sparse_polynomial" title="Sparse polynomial">sparse polynomials</a>.<sup id="cite_ref-brent_2-0" class="reference"><a href="#cite_note-brent-2">[2]</a></sup> They generate the next number in their sequence by repeatedly taking the <a href="/wiki/Bitwise_operation#XOR" title="Bitwise operation">exclusive or</a> of a number with a <a href="/wiki/Logical_shift" title="Logical shift">bit-shifted</a> version of itself. This makes execution extremely efficient on modern computer architectures, but it does not benefit efficiency in a hardware implementation. Like all LFSRs, the parameters have to be chosen very carefully in order to achieve a long period.<sup id="cite_ref-panne_3-0" class="reference"><a href="#cite_note-panne-3">[3]</a></sup> 645 </p><p>For execution in software, xorshift generators are among the fastest PRNGs, requiring very small code and state. However, they do not pass every statistical test without further refinement. This weakness is amended by combining them with a non-linear function, as described in the original paper. Because plain xorshift generators (without a non-linear step) fail some statistical tests, they have been accused of being unreliable.<sup id="cite_ref-panne_3-1" class="reference"><a href="#cite_note-panne-3">[3]</a></sup><sup class="reference nowrap"><span title="Page: 360">: 360 </span></sup> 646 </p> 647 <meta property="mw:PageProp/toc" /> 648 <h2><span class="mw-headline" id="Example_implementation">Example implementation</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Xorshift&action=edit&section=1" title="Edit section: Example implementation"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2> 649 <p>A <a href="/wiki/C_(programming_language)" title="C (programming language)">C</a> version<sup id="cite_ref-4" class="reference"><a href="#cite_note-4">[a]</a></sup> of three xorshift algorithms<sup id="cite_ref-marsaglia_1-1" class="reference"><a href="#cite_note-marsaglia-1">[1]</a></sup><sup class="reference nowrap"><span title="Page: 4,5">: 4,5 </span></sup> is given here. The first has one 32-bit word of state, and period 2<sup>32</sup>−1. The second has one 64-bit word of state and period 2<sup>64</sup>−1. The last one has four 32-bit words of state, and period 2<sup>128</sup>−1. The 128-bit algorithm passes the <a href="/wiki/Diehard_tests" title="Diehard tests">diehard tests</a>. However, it fails the <i>MatrixRank</i> and <i>LinearComp</i> tests of the <i>BigCrush</i> test suite from the <a href="/wiki/TestU01" title="TestU01">TestU01</a> framework. 650 </p><p>All use three shifts and three or four exclusive-or operations: 651 </p> 652 <div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdint.h></span> 653 654 <span class="k">struct</span><span class="w"> </span><span class="nc">xorshift32_state</span><span class="w"> </span><span class="p">{</span> 655 <span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">a</span><span class="p">;</span> 656 <span class="p">};</span> 657 658 <span class="cm">/* The state must be initialized to non-zero */</span> 659 <span class="kt">uint32_t</span><span class="w"> </span><span class="nf">xorshift32</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">xorshift32_state</span><span class="w"> </span><span class="o">*</span><span class="n">state</span><span class="p">)</span> 660 <span class="p">{</span> 661 <span class="w"> </span><span class="cm">/* Algorithm "xor" from p. 4 of Marsaglia, "Xorshift RNGs" */</span> 662 <span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">a</span><span class="p">;</span> 663 <span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">13</span><span class="p">;</span> 664 <span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">17</span><span class="p">;</span> 665 <span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> 666 <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">x</span><span class="p">;</span> 667 <span class="p">}</span> 668 669 <span class="k">struct</span><span class="w"> </span><span class="nc">xorshift64_state</span><span class="w"> </span><span class="p">{</span> 670 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">a</span><span class="p">;</span> 671 <span class="p">};</span> 672 673 <span class="kt">uint64_t</span><span class="w"> </span><span class="nf">xorshift64</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">xorshift64_state</span><span class="w"> </span><span class="o">*</span><span class="n">state</span><span class="p">)</span> 674 <span class="p">{</span> 675 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">a</span><span class="p">;</span> 676 <span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">13</span><span class="p">;</span> 677 <span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">7</span><span class="p">;</span> 678 <span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">17</span><span class="p">;</span> 679 <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">x</span><span class="p">;</span> 680 <span class="p">}</span> 681 682 <span class="cm">/* struct xorshift128_state can alternatively be defined as a pair</span> 683 <span class="cm"> of uint64_t or a uint128_t where supported */</span> 684 <span class="k">struct</span><span class="w"> </span><span class="nc">xorshift128_state</span><span class="w"> </span><span class="p">{</span> 685 <span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">];</span> 686 <span class="p">};</span> 687 688 <span class="cm">/* The state must be initialized to non-zero */</span> 689 <span class="kt">uint32_t</span><span class="w"> </span><span class="nf">xorshift128</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">xorshift128_state</span><span class="w"> </span><span class="o">*</span><span class="n">state</span><span class="p">)</span> 690 <span class="p">{</span> 691 <span class="w"> </span><span class="cm">/* Algorithm "xor128" from p. 5 of Marsaglia, "Xorshift RNGs" */</span> 692 <span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span> 693 <span class="w"> </span> 694 <span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span><span class="w"> </span><span class="cm">/* Perform a contrived 32-bit shift. */</span> 695 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> 696 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> 697 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">s</span><span class="p">;</span> 698 699 <span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">11</span><span class="p">;</span> 700 <span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">8</span><span class="p">;</span> 701 <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="p">(</span><span class="n">s</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">19</span><span class="p">);</span> 702 <span class="p">}</span> 703 </pre></div> 704 <h2><span class="mw-headline" id="Non-linear_variations">Non-linear variations</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Xorshift&action=edit&section=2" title="Edit section: Non-linear variations"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2> 705 <p>All xorshift generators fail some tests in the <i>BigCrush</i> test suite. This is true for all generators based on linear recurrences, such as the <a href="/wiki/Mersenne_Twister" title="Mersenne Twister">Mersenne Twister</a> or <a href="/wiki/Well_Equidistributed_Long-period_Linear" class="mw-redirect" title="Well Equidistributed Long-period Linear">WELL</a>. However, it is easy to scramble the output of such generators to improve their quality. 706 </p><p>The scramblers known as <style data-mw-deduplicate="TemplateStyles:r886049734">.mw-parser-output .monospaced{font-family:monospace,monospace}</style><span class="monospaced">+</span> and <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">*</span> still leave weakness in the low bits,<sup id="cite_ref-Lemire19_5-0" class="reference"><a href="#cite_note-Lemire19-5">[4]</a></sup> so they are intended for floating point use, as double-precision floating-point numbers only use 53 bits, so the lower 11 bits are not used. For general purpose, the scrambler <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">**</span> (pronounced <i>starstar</i>) makes the LFSR generators pass in all bits. 707 </p> 708 <h3><span class="mw-headline" id="xorwow">xorwow</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Xorshift&action=edit&section=3" title="Edit section: xorwow"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3> 709 <p>Marsaglia suggested scrambling the output by combining it with a simple additive counter modulo 2<sup>32</sup> (which he calls a "<a href="/wiki/Weyl_sequence" title="Weyl sequence">Weyl sequence</a>" after <a href="/wiki/Weyl%27s_equidistribution_theorem" class="mw-redirect" title="Weyl's equidistribution theorem">Weyl's equidistribution theorem</a>). This also increases the period by a factor of 2<sup>32</sup>, to 2<sup>192</sup>−2<sup>32</sup>: 710 </p> 711 <div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdint.h></span> 712 713 <span class="k">struct</span><span class="w"> </span><span class="nc">xorwow_state</span><span class="w"> </span><span class="p">{</span> 714 <span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">];</span> 715 <span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">counter</span><span class="p">;</span> 716 <span class="p">};</span> 717 718 <span class="cm">/* The state array must be initialized to not be all zero in the first four words */</span> 719 <span class="kt">uint32_t</span><span class="w"> </span><span class="nf">xorwow</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">xorwow_state</span><span class="w"> </span><span class="o">*</span><span class="n">state</span><span class="p">)</span> 720 <span class="p">{</span> 721 <span class="w"> </span><span class="cm">/* Algorithm "xorwow" from p. 5 of Marsaglia, "Xorshift RNGs" */</span> 722 <span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">];</span> 723 <span class="w"> </span> 724 <span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span><span class="w"> </span><span class="cm">/* Perform a contrived 32-bit shift. */</span> 725 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span> 726 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> 727 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> 728 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">s</span><span class="p">;</span> 729 <span class="w"> </span> 730 <span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> 731 <span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> 732 <span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="p">(</span><span class="n">s</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">4</span><span class="p">);</span> 733 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">t</span><span class="p">;</span> 734 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">counter</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">362437</span><span class="p">;</span> 735 <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">counter</span><span class="p">;</span> 736 <span class="p">}</span> 737 </pre></div> 738 <p>This performs well, but fails a few tests in BigCrush.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6">[5]</a></sup> This generator is the default in Nvidia's <a href="/wiki/CUDA" title="CUDA">CUDA</a> toolkit.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7">[6]</a></sup> 739 </p> 740 <h3><span id="xorshift.2A"></span><span class="mw-headline" id="xorshift*">xorshift*</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Xorshift&action=edit&section=4" title="Edit section: xorshift*"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3> 741 <p>An <em>xorshift*</em> generator applies an invertible multiplication (modulo the word size) as a non-linear transformation to the output of an <em>xorshift</em> generator, as suggested by Marsaglia.<sup id="cite_ref-marsaglia_1-2" class="reference"><a href="#cite_note-marsaglia-1">[1]</a></sup> All <em>xorshift*</em> generators emit a sequence of values that is <a href="/wiki/Equidistributed" class="mw-redirect" title="Equidistributed">equidistributed</a> in the maximum possible dimension (except that they will never output zero for 16 calls, i.e. 128 bytes, in a row).<sup id="cite_ref-vigna_8-0" class="reference"><a href="#cite_note-vigna-8">[7]</a></sup> 742 </p><p>The following 64-bit generator has a maximal period of 2<sup>64</sup>−1.<sup id="cite_ref-vigna_8-1" class="reference"><a href="#cite_note-vigna-8">[7]</a></sup> 743 </p> 744 <div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdint.h></span> 745 746 <span class="cm">/* xorshift64s, variant A_1(12,25,27) with multiplier M_32 from line 3 of table 5 */</span> 747 <span class="kt">uint64_t</span><span class="w"> </span><span class="nf">xorshift64star</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> 748 <span class="w"> </span><span class="cm">/* initial seed must be nonzero, don't use a static variable for the state if multithreaded */</span> 749 <span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> 750 <span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">12</span><span class="p">;</span> 751 <span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">25</span><span class="p">;</span> 752 <span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">27</span><span class="p">;</span> 753 <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mh">0x2545F4914F6CDD1DULL</span><span class="p">;</span> 754 <span class="p">}</span> 755 </pre></div> 756 <p>The generator fails only the <i>MatrixRank</i> test of BigCrush, however if the generator is modified to return only the high 32 bits, then it passes BigCrush with zero failures.<sup id="cite_ref-PCG_9-0" class="reference"><a href="#cite_note-PCG-9">[8]</a></sup><sup class="reference nowrap"><span title="Page: 7">: 7 </span></sup> In fact, a reduced version with only 40 bits of internal state passes the suite, suggesting a large safety margin.<sup id="cite_ref-PCG_9-1" class="reference"><a href="#cite_note-PCG-9">[8]</a></sup><sup class="reference nowrap"><span title="Page: 19">: 19 </span></sup> A similar generator suggested in <i><a href="/wiki/Numerical_Recipes" title="Numerical Recipes">Numerical Recipes</a></i><sup id="cite_ref-NR_10-0" class="reference"><a href="#cite_note-NR-10">[9]</a></sup> as <code>RanQ1</code> also fails the <i>BirthdaySpacings</i> test. 757 </p><p>Vigna<sup id="cite_ref-vigna_8-2" class="reference"><a href="#cite_note-vigna-8">[7]</a></sup> suggests the following <em>xorshift1024*</em> generator with 1024 bits of state and a maximal period of 2<sup>1024</sup>−1; however, it does not always pass BigCrush.<sup id="cite_ref-Lemire19_5-1" class="reference"><a href="#cite_note-Lemire19-5">[4]</a></sup> xoshiro256** is therefore a much better option. 758 </p> 759 <div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdint.h></span> 760 761 <span class="cm">/* The state must be seeded so that there is at least one non-zero element in array */</span> 762 <span class="k">struct</span><span class="w"> </span><span class="nc">xorshift1024s_state</span><span class="w"> </span><span class="p">{</span> 763 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">x</span><span class="p">[</span><span class="mi">16</span><span class="p">];</span> 764 <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">index</span><span class="p">;</span> 765 <span class="p">};</span> 766 767 <span class="kt">uint64_t</span><span class="w"> </span><span class="nf">xorshift1024s</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">xorshift1024s_state</span><span class="w"> </span><span class="o">*</span><span class="n">state</span><span class="p">)</span> 768 <span class="p">{</span> 769 <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">index</span><span class="p">;</span> 770 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="n">index</span><span class="o">++</span><span class="p">];</span> 771 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="n">index</span><span class="w"> </span><span class="o">&=</span><span class="w"> </span><span class="mi">15</span><span class="p">];</span> 772 <span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">31</span><span class="p">;</span><span class="w"> </span><span class="c1">// a</span> 773 <span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">11</span><span class="p">;</span><span class="w"> </span><span class="c1">// b -- Again, the shifts and the multipliers are tunable</span> 774 <span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="p">(</span><span class="n">s</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">30</span><span class="p">);</span><span class="w"> </span><span class="c1">// c</span> 775 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="n">index</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">t</span><span class="p">;</span> 776 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">index</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">index</span><span class="p">;</span> 777 <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">1181783497276652981ULL</span><span class="p">;</span> 778 <span class="p">}</span> 779 </pre></div> 780 <h3><span id="xorshift.2B"></span><span class="mw-headline" id="xorshift+">xorshift+</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Xorshift&action=edit&section=5" title="Edit section: xorshift+"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3> 781 <p>An <em>xorshift+</em> generator can achieve an order of magnitude fewer failures than <a href="/wiki/Mersenne_Twister" title="Mersenne Twister">Mersenne Twister</a> or <a href="/wiki/Well_equidistributed_long-period_linear" title="Well equidistributed long-period linear">WELL</a>. A native C implementation of an xorshift+ generator that passes all tests from the BigCrush suite can typically generate a random number in fewer than 10 <a href="/wiki/Clock_cycle" class="mw-redirect" title="Clock cycle">clock cycles</a> on <a href="/wiki/X86" title="X86">x86</a>, thanks to <a href="/wiki/Instruction_pipelining" title="Instruction pipelining">instruction pipelining</a>.<sup id="cite_ref-shootout_11-0" class="reference"><a href="#cite_note-shootout-11">[10]</a></sup> 782 </p><p>Rather than using multiplication, it is possible to use addition as a faster non-linear transformation. The idea was first proposed by Saito and Matsumoto (also responsible for the Mersenne Twister) in the <em>XSadd</em> generator, which adds two consecutive outputs of an underlying <em>xorshift</em> generator based on 32-bit shifts.<sup id="cite_ref-xsadd_12-0" class="reference"><a href="#cite_note-xsadd-12">[11]</a></sup> However, one disadvantage of adding consecutive outputs is that, while the underlying <em>xorshift128</em> generator is 2-dimensionally equidistributed, the <em>xorshift128+</em> generator is only 1-dimensionally equidistributed.<sup id="cite_ref-vigna2_13-0" class="reference"><a href="#cite_note-vigna2-13">[12]</a></sup> 783 </p><p><em>XSadd</em> has some weakness in the low-order bits of its output; it fails several BigCrush tests when the output words are bit-reversed. To correct this problem, Vigna introduced the <em>xorshift+</em> family,<sup id="cite_ref-vigna2_13-1" class="reference"><a href="#cite_note-vigna2-13">[12]</a></sup> based on 64-bit shifts. <em>xorshift+</em> generators, even as large as <em>xorshift1024+</em>, exhibit some detectable linearity in the low-order bits of their output;<sup id="cite_ref-Lemire19_5-2" class="reference"><a href="#cite_note-Lemire19-5">[4]</a></sup> it passes BigCrush, but doesn't when the 32 lowest-order bits are used in reverse order from each 64-bit word.<sup id="cite_ref-Lemire19_5-3" class="reference"><a href="#cite_note-Lemire19-5">[4]</a></sup> This generator is one of the fastest generators passing BigCrush.<sup id="cite_ref-shootout_11-1" class="reference"><a href="#cite_note-shootout-11">[10]</a></sup> 784 </p><p>The following <em>xorshift128+</em> generator uses 128 bits of state and has a maximal period of 2<sup>128</sup>−1. 785 </p> 786 <div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdint.h></span> 787 788 <span class="k">struct</span><span class="w"> </span><span class="nc">xorshift128p_state</span><span class="w"> </span><span class="p">{</span> 789 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> 790 <span class="p">};</span> 791 792 <span class="cm">/* The state must be seeded so that it is not all zero */</span> 793 <span class="kt">uint64_t</span><span class="w"> </span><span class="nf">xorshift128p</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">xorshift128p_state</span><span class="w"> </span><span class="o">*</span><span class="n">state</span><span class="p">)</span> 794 <span class="p">{</span> 795 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> 796 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> 797 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">s</span><span class="p">;</span> 798 <span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">23</span><span class="p">;</span><span class="w"> </span><span class="c1">// a</span> 799 <span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">18</span><span class="p">;</span><span class="w"> </span><span class="c1">// b -- Again, the shifts and the multipliers are tunable</span> 800 <span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="p">(</span><span class="n">s</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">5</span><span class="p">);</span><span class="w"> </span><span class="c1">// c</span> 801 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">t</span><span class="p">;</span> 802 <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">s</span><span class="p">;</span> 803 <span class="p">}</span> 804 </pre></div> 805 <h2><span class="mw-headline" id="xoshiro">xoshiro</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Xorshift&action=edit&section=6" title="Edit section: xoshiro"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2> 806 <p>xoshiro and xoroshiro use rotations in addition to shifts. According to Vigna, they are faster and produce better quality output than xorshift.<sup id="cite_ref-xoshiro-web_14-0" class="reference"><a href="#cite_note-xoshiro-web-14">[13]</a></sup><sup id="cite_ref-xoshiro-paper_15-0" class="reference"><a href="#cite_note-xoshiro-paper-15">[14]</a></sup> 807 </p><p>This class of generator has variants for 32-bit and 64-bit integer and floating point output; for floating point, one takes the upper 53 bits (for <a href="/wiki/Double-precision_floating-point_format" title="Double-precision floating-point format">binary64</a>) or the upper 23 bits (for <a href="/wiki/Single-precision_floating-point_format" title="Single-precision floating-point format">binary32</a>), since the upper bits are of better quality than the lower bits in the floating point generators. The algorithms also include a <code>jump</code> function, which sets the state forward by some number of steps – usually a power of two that allows many <a href="/wiki/Thread_(computing)" title="Thread (computing)">threads of execution</a> to start at distinct initial states. 808 </p><p>For 32-bit output, xoshiro128** and xoshiro128+ are exactly equivalent to xoshiro256** and xoshiro256+, with <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">uint32_t</span> in place of <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">uint64_t</span>, and with different shift/rotate constants. 809 </p><p>More recently, the <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">xoshiro++</span> generators have been made as an alternative to the <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">xoshiro**</span> generators. They are used in some implementations of <a href="/wiki/Fortran" title="Fortran">Fortran</a> compilers such as GNU Fortran, <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a>, and <a href="/wiki/Julia_(programming_language)" title="Julia (programming language)">Julia</a>.<sup id="cite_ref-xoshiro_16-0" class="reference"><a href="#cite_note-xoshiro-16">[15]</a></sup> 810 </p> 811 <h3><span id="xoshiro256.2A.2A"></span><span class="mw-headline" id="xoshiro256**">xoshiro256**</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Xorshift&action=edit&section=7" title="Edit section: xoshiro256**"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3> 812 <p>xoshiro256** is the family's general-purpose random 64-bit number generator. It is used in <a href="/wiki/GNU_Fortran" title="GNU Fortran">GNU Fortran</a> <a href="/wiki/Compiler" title="Compiler">compiler</a>, <a href="/wiki/Lua_(programming_language)" title="Lua (programming language)">Lua</a> (as of Lua 5.4), and the <a href="/wiki/.NET" title=".NET">.NET</a> framework (as of .NET 6.0).<sup id="cite_ref-xoshiro_16-1" class="reference"><a href="#cite_note-xoshiro-16">[15]</a></sup> 813 </p> 814 <div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cm">/* Adapted from the code included on Sebastiano Vigna's website */</span> 815 816 <span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdint.h></span> 817 818 <span class="kt">uint64_t</span><span class="w"> </span><span class="nf">rol64</span><span class="p">(</span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">k</span><span class="p">)</span> 819 <span class="p">{</span> 820 <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">k</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="p">(</span><span class="mi">64</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">k</span><span class="p">));</span> 821 <span class="p">}</span> 822 823 <span class="k">struct</span><span class="w"> </span><span class="nc">xoshiro256ss_state</span><span class="w"> </span><span class="p">{</span> 824 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">4</span><span class="p">];</span> 825 <span class="p">};</span> 826 827 <span class="kt">uint64_t</span><span class="w"> </span><span class="nf">xoshiro256ss</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">xoshiro256ss_state</span><span class="w"> </span><span class="o">*</span><span class="n">state</span><span class="p">)</span> 828 <span class="p">{</span> 829 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="o">*</span><span class="n">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">s</span><span class="p">;</span> 830 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rol64</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">9</span><span class="p">;</span> 831 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">17</span><span class="p">;</span> 832 833 <span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> 834 <span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> 835 <span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> 836 <span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span> 837 838 <span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">t</span><span class="p">;</span> 839 <span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rol64</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span><span class="w"> </span><span class="mi">45</span><span class="p">);</span> 840 841 <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">result</span><span class="p">;</span> 842 <span class="p">}</span> 843 </pre></div> 844 <h3><span id="xoshiro256.2B"></span><span class="mw-headline" id="xoshiro256+">xoshiro256+</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Xorshift&action=edit&section=8" title="Edit section: xoshiro256+"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3> 845 <p>xoshiro256+ is approximately 15% faster than xoshiro256**, but the lowest three bits have low linear complexity; therefore, it should be used only for floating point results by extracting the upper 53 bits. 846 </p> 847 <div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdint.h></span> 848 849 <span class="kt">uint64_t</span><span class="w"> </span><span class="nf">rol64</span><span class="p">(</span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">k</span><span class="p">)</span> 850 <span class="p">{</span> 851 <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="n">k</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="p">(</span><span class="mi">64</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">k</span><span class="p">));</span> 852 <span class="p">}</span> 853 854 <span class="k">struct</span><span class="w"> </span><span class="nc">xoshiro256p_state</span><span class="w"> </span><span class="p">{</span> 855 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">4</span><span class="p">];</span> 856 <span class="p">};</span> 857 858 <span class="kt">uint64_t</span><span class="w"> </span><span class="nf">xoshiro256p</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">xoshiro256p_state</span><span class="w"> </span><span class="o">*</span><span class="n">state</span><span class="p">)</span> 859 <span class="p">{</span> 860 <span class="w"> </span><span class="kt">uint64_t</span><span class="o">*</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">s</span><span class="p">;</span> 861 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span> 862 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">17</span><span class="p">;</span> 863 864 <span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> 865 <span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> 866 <span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> 867 <span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span> 868 869 <span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">t</span><span class="p">;</span> 870 <span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rol64</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span><span class="w"> </span><span class="mi">45</span><span class="p">);</span> 871 872 <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">result</span><span class="p">;</span> 873 <span class="p">}</span> 874 </pre></div> 875 <h3><span class="mw-headline" id="xoroshiro">xoroshiro</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Xorshift&action=edit&section=9" title="Edit section: xoroshiro"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3> 876 <p>If space is at a premium, xoroshiro128** and xoroshiro128+ are equivalent to xoshiro256** and xoshiro256+. These have smaller state spaces, and thus are less useful for massively parallel programs. xoroshiro128+ also exhibits a mild dependency in the <a href="/wiki/Hamming_weight" title="Hamming weight">population count</a>, generating a failure after <span class="nowrap"><span data-sort-value="7013400000000000000♠"></span>5 <a href="/wiki/Terabyte" class="mw-redirect" title="Terabyte">TB</a></span> of output. The authors do not believe that this can be detected in real world programs. 877 </p><p>xoroshiro64** and xoroshiro64* are equivalent to xoroshiro128** and xoroshiro128+. Unlike the xoshiro generators, they are not straightforward ports of their higher-precision counterparts. 878 </p> 879 <h2><span class="mw-headline" id="Initialization">Initialization</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Xorshift&action=edit&section=10" title="Edit section: Initialization"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2> 880 <p>In the xoshiro paper, it is recommended to initialize the state of the generators using a generator which is radically different from the initialized generators, as well as one which will never give the "all-zero" state; for shift-register generators, this state is impossible to escape from.<sup id="cite_ref-xoshiro-paper_15-1" class="reference"><a href="#cite_note-xoshiro-paper-15">[14]</a></sup><sup id="cite_ref-initialization_17-0" class="reference"><a href="#cite_note-initialization-17">[16]</a></sup> The authors specifically recommend using the SplitMix64 generator, from a 64-bit seed, as follows: 881 </p> 882 <div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdint.h></span> 883 884 <span class="k">struct</span><span class="w"> </span><span class="nc">splitmix64_state</span><span class="w"> </span><span class="p">{</span> 885 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">s</span><span class="p">;</span> 886 <span class="p">};</span> 887 888 <span class="kt">uint64_t</span><span class="w"> </span><span class="nf">splitmix64</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">splitmix64_state</span><span class="w"> </span><span class="o">*</span><span class="n">state</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> 889 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">state</span><span class="o">-></span><span class="n">s</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mh">0x9E3779B97f4A7C15</span><span class="p">);</span> 890 <span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">result</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="p">(</span><span class="n">result</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">30</span><span class="p">))</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mh">0xBF58476D1CE4E5B9</span><span class="p">;</span> 891 <span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">result</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="p">(</span><span class="n">result</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">27</span><span class="p">))</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mh">0x94D049BB133111EB</span><span class="p">;</span> 892 <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="p">(</span><span class="n">result</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">31</span><span class="p">);</span> 893 <span class="p">}</span> 894 895 <span class="k">struct</span><span class="w"> </span><span class="nc">xorshift128_state</span><span class="w"> </span><span class="p">{</span> 896 <span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">];</span> 897 <span class="p">};</span> 898 899 <span class="c1">// one could do the same for any of the other generators</span> 900 <span class="kt">void</span><span class="w"> </span><span class="nf">xorshift128_init</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">xorshift128_state</span><span class="w"> </span><span class="o">*</span><span class="n">state</span><span class="p">,</span><span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">seed</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> 901 <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">splitmix64_state</span><span class="w"> </span><span class="n">smstate</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="n">seed</span><span class="p">};</span> 902 903 <span class="w"> </span><span class="kt">uint64_t</span><span class="w"> </span><span class="n">tmp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">splitmix64</span><span class="p">(</span><span class="o">&</span><span class="n">smstate</span><span class="p">);</span> 904 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">uint32_t</span><span class="p">)</span><span class="n">tmp</span><span class="p">;</span> 905 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">uint32_t</span><span class="p">)(</span><span class="n">tmp</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">32</span><span class="p">);</span> 906 907 <span class="w"> </span><span class="n">tmp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">splitmix64</span><span class="p">(</span><span class="o">&</span><span class="n">smstate</span><span class="p">);</span> 908 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">uint32_t</span><span class="p">)</span><span class="n">tmp</span><span class="p">;</span> 909 <span class="w"> </span><span class="n">state</span><span class="o">-></span><span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">uint32_t</span><span class="p">)(</span><span class="n">tmp</span><span class="w"> </span><span class="o">>></span><span class="w"> </span><span class="mi">32</span><span class="p">);</span> 910 <span class="p">}</span> 911 </pre></div> 912 <h2><span class="mw-headline" id="Notes">Notes</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Xorshift&action=edit&section=11" title="Edit section: Notes"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2> 913 <style data-mw-deduplicate="TemplateStyles:r1011085734">.mw-parser-output .reflist{font-size:90%;margin-bottom:0.5em;list-style-type:decimal}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}</style><div class="reflist reflist-lower-alpha"> 914 <div class="mw-references-wrap"><ol class="references"> 915 <li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text">In C and most other C-based languages, <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" id="" style="" dir="ltr">^</code> represents <a href="/wiki/Bitwise_operation#XOR" title="Bitwise operation">bitwise XOR</a>, and <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" id="" style="" dir="ltr"><<</code> and <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" id="" style="" dir="ltr">>></code> represent <a href="/wiki/Logical_shift" title="Logical shift">bitwise shifts</a>.</span> 916 </li> 917 </ol></div></div> 918 <h2><span class="mw-headline" id="References">References</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Xorshift&action=edit&section=12" title="Edit section: References"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2> 919 <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1011085734"><div class="reflist"> 920 <div class="mw-references-wrap mw-references-columns"><ol class="references"> 921 <li id="cite_note-marsaglia-1"><span class="mw-cite-backlink">^ <a href="#cite_ref-marsaglia_1-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-marsaglia_1-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-marsaglia_1-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1133582631">.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}</style><cite id="CITEREFMarsaglia2003" class="citation journal cs1"><a href="/wiki/George_Marsaglia" title="George Marsaglia">Marsaglia, George</a> (July 2003). <a rel="nofollow" class="external text" href="https://doi.org/10.18637%2Fjss.v008.i14">"Xorshift RNGs"</a>. <i><a href="/wiki/Journal_of_Statistical_Software" title="Journal of Statistical Software">Journal of Statistical Software</a></i>. <b>8</b> (14). <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="cs1-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.18637%2Fjss.v008.i14">10.18637/jss.v008.i14</a></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+Statistical+Software&rft.atitle=Xorshift+RNGs&rft.volume=8&rft.issue=14&rft.date=2003-07&rft_id=info%3Adoi%2F10.18637%2Fjss.v008.i14&rft.aulast=Marsaglia&rft.aufirst=George&rft_id=https%3A%2F%2Fdoi.org%2F10.18637%252Fjss.v008.i14&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span></span> 922 </li> 923 <li id="cite_note-brent-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-brent_2-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite id="CITEREFBrent2004" class="citation journal cs1"><a href="/wiki/Richard_P._Brent" title="Richard P. Brent">Brent, Richard P.</a> (August 2004). <a rel="nofollow" class="external text" href="https://doi.org/10.18637%2Fjss.v011.i05">"Note on Marsaglia's Xorshift Random Number Generators"</a>. <i><a href="/wiki/Journal_of_Statistical_Software" title="Journal of Statistical Software">Journal of Statistical Software</a></i>. <b>11</b> (5). <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="cs1-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.18637%2Fjss.v011.i05">10.18637/jss.v011.i05</a></span>. <a href="/wiki/Hdl_(identifier)" class="mw-redirect" title="Hdl (identifier)">hdl</a>:<span class="cs1-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://hdl.handle.net/1885%2F34049">1885/34049</a></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+Statistical+Software&rft.atitle=Note+on+Marsaglia%27s+Xorshift+Random+Number+Generators&rft.volume=11&rft.issue=5&rft.date=2004-08&rft_id=info%3Ahdl%2F1885%2F34049&rft_id=info%3Adoi%2F10.18637%2Fjss.v011.i05&rft.aulast=Brent&rft.aufirst=Richard+P.&rft_id=https%3A%2F%2Fdoi.org%2F10.18637%252Fjss.v011.i05&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span></span> 924 </li> 925 <li id="cite_note-panne-3"><span class="mw-cite-backlink">^ <a href="#cite_ref-panne_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-panne_3-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite id="CITEREFPannetonL'Ecuyer2005" class="citation journal cs1">Panneton, François; L'Ecuyer, Pierre (October 2005). <a rel="nofollow" class="external text" href="https://www.iro.umontreal.ca/~lecuyer/myftp/papers/xorshift.pdf">"On the xorshift random number generators"</a> <span class="cs1-format">(PDF)</span>. <i>ACM Transactions on Modeling and Computer Simulation</i>. <b>15</b> (4): 346–361. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F1113316.1113319">10.1145/1113316.1113319</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:11136098">11136098</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=ACM+Transactions+on+Modeling+and+Computer+Simulation&rft.atitle=On+the+xorshift+random+number+generators&rft.volume=15&rft.issue=4&rft.pages=346-361&rft.date=2005-10&rft_id=info%3Adoi%2F10.1145%2F1113316.1113319&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A11136098%23id-name%3DS2CID&rft.aulast=Panneton&rft.aufirst=Fran%C3%A7ois&rft.au=L%27Ecuyer%2C+Pierre&rft_id=https%3A%2F%2Fwww.iro.umontreal.ca%2F~lecuyer%2Fmyftp%2Fpapers%2Fxorshift.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span></span> 926 </li> 927 <li id="cite_note-Lemire19-5"><span class="mw-cite-backlink">^ <a href="#cite_ref-Lemire19_5-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Lemire19_5-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-Lemire19_5-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-Lemire19_5-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite id="CITEREFLemireO’Neill2019" class="citation journal cs1">Lemire, Daniel; O’Neill, Melissa E. (April 2019). "Xorshift1024*, Xorshift1024+, Xorshift128+ and Xoroshiro128+ Fail Statistical Tests for Linearity". <i>Computational and Applied Mathematics</i>. <b>350</b>: 139–142. <a href="/wiki/ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="cs1-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/1810.05313">1810.05313</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.cam.2018.10.019">10.1016/j.cam.2018.10.019</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:52983294">52983294</a>. <q>We report that these scrambled generators systematically fail Big Crush—specifically the linear-complexity and matrix-rank tests that detect linearity—when taking the 32 lowest-order bits in reverse order from each 64-bit word.</q></cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Computational+and+Applied+Mathematics&rft.atitle=Xorshift1024%2A%2C+Xorshift1024%2B%2C+Xorshift128%2B+and+Xoroshiro128%2B+Fail+Statistical+Tests+for+Linearity&rft.volume=350&rft.pages=139-142&rft.date=2019-04&rft_id=info%3Aarxiv%2F1810.05313&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A52983294%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1016%2Fj.cam.2018.10.019&rft.aulast=Lemire&rft.aufirst=Daniel&rft.au=O%E2%80%99Neill%2C+Melissa+E.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span></span> 928 </li> 929 <li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite id="CITEREFLe_Floc'h2011" class="citation web cs1">Le Floc'h, Fabien (12 January 2011). <a rel="nofollow" class="external text" href="https://chasethedevil.github.io/post/xorwow-lecuyer-testu01-results/">"XORWOW L'ecuyer TestU01 Results"</a>. <i>Chase The Devil (blog)</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2017-11-02</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Chase+The+Devil+%28blog%29&rft.atitle=XORWOW+L%27ecuyer+TestU01+Results&rft.date=2011-01-12&rft.aulast=Le+Floc%27h&rft.aufirst=Fabien&rft_id=https%3A%2F%2Fchasethedevil.github.io%2Fpost%2Fxorwow-lecuyer-testu01-results%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span></span> 930 </li> 931 <li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.nvidia.com/cuda/curand/testing.html">"cuRAND Testing"</a>. <a href="/wiki/Nvidia" title="Nvidia">Nvidia</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2017-11-02</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=cuRAND+Testing&rft.pub=Nvidia&rft_id=https%3A%2F%2Fdocs.nvidia.com%2Fcuda%2Fcurand%2Ftesting.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span></span> 932 </li> 933 <li id="cite_note-vigna-8"><span class="mw-cite-backlink">^ <a href="#cite_ref-vigna_8-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-vigna_8-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-vigna_8-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"> 934 <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite id="CITEREFVigna2016" class="citation journal cs1">Vigna, Sebastiano (July 2016). <a rel="nofollow" class="external text" href="http://vigna.di.unimi.it/ftp/papers/xorshift.pdf">"An experimental exploration of Marsaglia's xorshift generators, scrambled"</a> <span class="cs1-format">(PDF)</span>. <i>ACM Transactions on Mathematical Software</i>. <b>42</b> (4): 30. <a href="/wiki/ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="cs1-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/1402.6246">1402.6246</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F2845077">10.1145/2845077</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:13936073">13936073</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=ACM+Transactions+on+Mathematical+Software&rft.atitle=An+experimental+exploration+of+Marsaglia%27s+xorshift+generators%2C+scrambled&rft.volume=42&rft.issue=4&rft.pages=30&rft.date=2016-07&rft_id=info%3Aarxiv%2F1402.6246&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A13936073%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1145%2F2845077&rft.aulast=Vigna&rft.aufirst=Sebastiano&rft_id=http%3A%2F%2Fvigna.di.unimi.it%2Fftp%2Fpapers%2Fxorshift.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span> Proposes xorshift* generators, adding a final multiplication by a constant.</span> 935 </li> 936 <li id="cite_note-PCG-9"><span class="mw-cite-backlink">^ <a href="#cite_ref-PCG_9-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-PCG_9-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite id="CITEREFO'Neill2014" class="citation techreport cs1">O'Neill, Melissa E. (5 September 2014). <a rel="nofollow" class="external text" href="http://www.pcg-random.org/pdf/hmc-cs-2014-0905.pdf"><i>PCG: A Family of Simple Fast Space-Efficient Statistically Good Algorithms for Random Number Generation</i></a> <span class="cs1-format">(PDF)</span> (Technical report). <a href="/wiki/Harvey_Mudd_College" title="Harvey Mudd College">Harvey Mudd College</a>. pp. 6–8. HMC-CS-2014-0905.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=report&rft.btitle=PCG%3A+A+Family+of+Simple+Fast+Space-Efficient+Statistically+Good+Algorithms+for+Random+Number+Generation&rft.pages=6-8&rft.pub=Harvey+Mudd+College&rft.date=2014-09-05&rft.aulast=O%27Neill&rft.aufirst=Melissa+E.&rft_id=http%3A%2F%2Fwww.pcg-random.org%2Fpdf%2Fhmc-cs-2014-0905.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span></span> 937 </li> 938 <li id="cite_note-NR-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-NR_10-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite id="CITEREFPressTeukolskyVetterlingFlannery2007" class="citation book cs1"><a href="/wiki/William_H._Press" title="William H. Press">Press, WH</a>; <a href="/wiki/Saul_Teukolsky" title="Saul Teukolsky">Teukolsky, SA</a>; Vetterling, WT; Flannery, BP (2007). <a rel="nofollow" class="external text" href="http://apps.nrbook.com/empanel/index.html#pg=345">"Section 7.1.2.A. 64-bit Xorshift Method"</a>. <i>Numerical Recipes: The Art of Scientific Computing</i> (3rd ed.). New York: Cambridge University Press. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-521-88068-8" title="Special:BookSources/978-0-521-88068-8"><bdi>978-0-521-88068-8</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Section+7.1.2.A.+64-bit+Xorshift+Method&rft.btitle=Numerical+Recipes%3A+The+Art+of+Scientific+Computing&rft.place=New+York&rft.edition=3rd&rft.pub=Cambridge+University+Press&rft.date=2007&rft.isbn=978-0-521-88068-8&rft.aulast=Press&rft.aufirst=WH&rft.au=Teukolsky%2C+SA&rft.au=Vetterling%2C+WT&rft.au=Flannery%2C+BP&rft_id=http%3A%2F%2Fapps.nrbook.com%2Fempanel%2Findex.html%23pg%3D345&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span></span> 939 </li> 940 <li id="cite_note-shootout-11"><span class="mw-cite-backlink">^ <a href="#cite_ref-shootout_11-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-shootout_11-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite id="CITEREFVigna" class="citation web cs1">Vigna, Sebastiano. <a rel="nofollow" class="external text" href="http://prng.di.unimi.it">"xorshift*/xorshift+ generators and the PRNG shootout"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2014-10-25</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=xorshift%2A%2Fxorshift%2B+generators+and+the+PRNG+shootout&rft.aulast=Vigna&rft.aufirst=Sebastiano&rft_id=http%3A%2F%2Fprng.di.unimi.it&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span></span> 941 </li> 942 <li id="cite_note-xsadd-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-xsadd_12-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite id="CITEREFSaitoMatsumoto2014" class="citation web cs1">Saito, Mutsuo; Matsumoto, Makoto (2014). <a rel="nofollow" class="external text" href="http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/XSADD/">"XORSHIFT-ADD (XSadd): A variant of XORSHIFT"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2014-10-25</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=XORSHIFT-ADD+%28XSadd%29%3A+A+variant+of+XORSHIFT&rft.date=2014&rft.aulast=Saito&rft.aufirst=Mutsuo&rft.au=Matsumoto%2C+Makoto&rft_id=http%3A%2F%2Fwww.math.sci.hiroshima-u.ac.jp%2F~m-mat%2FMT%2FXSADD%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span></span> 943 </li> 944 <li id="cite_note-vigna2-13"><span class="mw-cite-backlink">^ <a href="#cite_ref-vigna2_13-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-vigna2_13-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite id="CITEREFVigna2017" class="citation journal cs1">Vigna, Sebastiano (May 2017). <a rel="nofollow" class="external text" href="http://vigna.di.unimi.it/ftp/papers/xorshiftplus.pdf">"Further scramblings of Marsaglia's xorshift generators"</a> <span class="cs1-format">(PDF)</span>. <i>Journal of Computational and Applied Mathematics</i>. <b>315</b> (C): 175–181. <a href="/wiki/ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="cs1-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/1404.0390">1404.0390</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.cam.2016.11.006">10.1016/j.cam.2016.11.006</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:6876444">6876444</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+Computational+and+Applied+Mathematics&rft.atitle=Further+scramblings+of+Marsaglia%27s+xorshift+generators&rft.volume=315&rft.issue=C&rft.pages=175-181&rft.date=2017-05&rft_id=info%3Aarxiv%2F1404.0390&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A6876444%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1016%2Fj.cam.2016.11.006&rft.aulast=Vigna&rft.aufirst=Sebastiano&rft_id=http%3A%2F%2Fvigna.di.unimi.it%2Fftp%2Fpapers%2Fxorshiftplus.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span> Describes xorshift+ generators, a generalization of XSadd.</span> 945 </li> 946 <li id="cite_note-xoshiro-web-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-xoshiro-web_14-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite id="CITEREFVigna" class="citation web cs1">Vigna, Sebastiano. <a rel="nofollow" class="external text" href="http://xoroshiro.di.unimi.it">"xoshiro/xoroshiro generators and the PRNG shootout"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2019-07-07</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=xoshiro%2Fxoroshiro+generators+and+the+PRNG+shootout&rft.aulast=Vigna&rft.aufirst=Sebastiano&rft_id=http%3A%2F%2Fxoroshiro.di.unimi.it&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span></span> 947 </li> 948 <li id="cite_note-xoshiro-paper-15"><span class="mw-cite-backlink">^ <a href="#cite_ref-xoshiro-paper_15-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-xoshiro-paper_15-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite id="CITEREFBlackmanVigna2018" class="citation journal cs1">Blackman, David; Vigna, Sebastiano (2018). "Scrambled Linear Pseudorandom Number Generators". <i>Data Structures and Algorithms</i>. <a href="/wiki/ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="cs1-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/1805.01407">1805.01407</a></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Data+Structures+and+Algorithms&rft.atitle=Scrambled+Linear+Pseudorandom+Number+Generators&rft.date=2018&rft_id=info%3Aarxiv%2F1805.01407&rft.aulast=Blackman&rft.aufirst=David&rft.au=Vigna%2C+Sebastiano&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span></span> 949 </li> 950 <li id="cite_note-xoshiro-16"><span class="mw-cite-backlink">^ <a href="#cite_ref-xoshiro_16-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-xoshiro_16-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://prng.di.unimi.it">"xoshiro / xoroshiro generators and the PRNG shootout"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-09-07</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=xoshiro+%2F+xoroshiro+generators+and+the+PRNG+shootout&rft_id=https%3A%2F%2Fprng.di.unimi.it&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span></span> 951 </li> 952 <li id="cite_note-initialization-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-initialization_17-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite id="CITEREFMatsumotoWadaKuramotoAshihara2007" class="citation journal cs1">Matsumoto, Makoto; Wada, Isaku; Kuramoto, Ai; Ashihara, Hyo (September 2007). "Common defects in initialization of pseudorandom number generators". <i>ACM Transactions on Modeling and Computer Simulation</i>. <b>17</b> (4): 15–es. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F1276927.1276928">10.1145/1276927.1276928</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:1721554">1721554</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=ACM+Transactions+on+Modeling+and+Computer+Simulation&rft.atitle=Common+defects+in+initialization+of+pseudorandom+number+generators&rft.volume=17&rft.issue=4&rft.pages=15-es&rft.date=2007-09&rft_id=info%3Adoi%2F10.1145%2F1276927.1276928&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A1721554%23id-name%3DS2CID&rft.aulast=Matsumoto&rft.aufirst=Makoto&rft.au=Wada%2C+Isaku&rft.au=Kuramoto%2C+Ai&rft.au=Ashihara%2C+Hyo&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span></span> 953 </li> 954 </ol></div></div> 955 <h2><span class="mw-headline" id="Further_reading">Further reading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Xorshift&action=edit&section=13" title="Edit section: Further reading"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2> 956 <ul><li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1133582631"><cite class="citation journal cs1"><a href="/wiki/Richard_P._Brent" title="Richard P. Brent">Brent, Richard P.</a> (July 2006). <a rel="nofollow" class="external text" href="https://maths-people.anu.edu.au/~brent/pub/pub224.html">"Some long-period random number generators using shifts and xors"</a>. <i>ANZIAM Journal</i>. <b>48</b>: C188–C202.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=ANZIAM+Journal&rft.atitle=Some+long-period+random+number+generators+using+shifts+and+xors&rft.volume=48&rft.pages=C188-C202&rft.date=2006-07&rft.aulast=Brent&rft.aufirst=Richard+P.&rft_id=https%3A%2F%2Fmaths-people.anu.edu.au%2F~brent%2Fpub%2Fpub224.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AXorshift" class="Z3988"></span> Lists generators of various sizes with four shifts (two per feedback word).</li></ul> 957 <!-- 958 NewPP limit report 959 Parsed by mw1350 960 Cached time: 20231125191829 961 Cache expiry: 1814400 962 Reduced expiry: false 963 Complications: [vary‐revision‐sha1, show‐toc] 964 CPU time usage: 0.405 seconds 965 Real time usage: 0.579 seconds 966 Preprocessor visited node count: 4436/1000000 967 Post‐expand include size: 39075/2097152 bytes 968 Template argument size: 2197/2097152 bytes 969 Highest expansion depth: 15/100 970 Expensive parser function count: 11/500 971 Unstrip recursion depth: 1/20 972 Unstrip post‐expand size: 96692/5000000 bytes 973 Lua time usage: 0.187/10.000 seconds 974 Lua memory usage: 9303486/52428800 bytes 975 Number of Wikibase entities loaded: 0/400 976 --> 977 <!-- 978 Transclusion expansion time report (%,ms,calls,template) 979 100.00% 491.091 1 -total 980 36.90% 181.212 2 Template:Reflist 981 25.00% 122.753 9 Template:Cite_journal 982 16.31% 80.112 8 Template:R 983 14.82% 72.794 9 Template:R/ref 984 11.76% 57.771 1 Template:Short_description 985 9.94% 48.796 9 Template:R/superscript 986 7.94% 38.989 1 Template:Val 987 6.75% 33.131 2 Template:Pagetype 988 6.07% 29.797 17 Template:R/where 989 --> 990 991 <!-- Saved in parser cache with key enwiki:pcache:idhash:17099722-0!canonical and timestamp 20231125191829 and revision id 1177332258. Rendering was triggered because: page-view 992 --> 993 </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> 994 <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikipedia.org/w/index.php?title=Xorshift&oldid=1177332258">https://en.wikipedia.org/w/index.php?title=Xorshift&oldid=1177332258</a>"</div></div> 995 <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Help:Category" title="Help:Category">Category</a>: <ul><li><a href="/wiki/Category:Pseudorandom_number_generators" title="Category:Pseudorandom number generators">Pseudorandom number generators</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:Articles_with_short_description" title="Category:Articles with short description">Articles with short description</a></li><li><a href="/wiki/Category:Short_description_is_different_from_Wikidata" title="Category:Short description is different from Wikidata">Short description is different from Wikidata</a></li><li><a href="/wiki/Category:Articles_with_example_C_code" title="Category:Articles with example C code">Articles with example C code</a></li></ul></div></div> 996 </div> 997 </main> 998 999 </div> 1000 <div class="mw-footer-container"> 1001 1002 <footer id="footer" class="mw-footer" role="contentinfo" > 1003 <ul id="footer-info"> 1004 <li id="footer-info-lastmod"> This page was last edited on 27 September 2023, at 06:08<span class="anonymous-show"> (UTC)</span>.</li> 1005 <li id="footer-info-copyright">Text is available under the <a rel="license" href="//en.wikipedia.org/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License">Creative Commons Attribution-ShareAlike License 4.0</a><a rel="license" href="//en.wikipedia.org/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License" style="display:none;"></a>; 1006 additional terms may apply. By using this site, you agree to the <a href="//foundation.wikimedia.org/wiki/Terms_of_Use">Terms of Use</a> and <a href="//foundation.wikimedia.org/wiki/Privacy_policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a href="//www.wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li> 1007 </ul> 1008 1009 <ul id="footer-places"> 1010 <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> 1011 <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> 1012 <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> 1013 <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li> 1014 <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> 1015 <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> 1016 <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> 1017 <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> 1018 <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=Xorshift&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> 1019 </ul> 1020 1021 <ul id="footer-icons" class="noprint"> 1022 <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/"><img src="/static/images/footer/wikimedia-button.png" srcset="/static/images/footer/wikimedia-button-1.5x.png 1.5x, /static/images/footer/wikimedia-button-2x.png 2x" width="88" height="31" alt="Wikimedia Foundation" loading="lazy" /></a></li> 1023 <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/"><img src="/static/images/footer/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki" srcset="/static/images/footer/poweredby_mediawiki_132x47.png 1.5x, /static/images/footer/poweredby_mediawiki_176x62.png 2x" width="88" height="31" loading="lazy"></a></li> 1024 </ul> 1025 1026 </footer> 1027 1028 </div> 1029 </div> 1030 </div> 1031 <div class="vector-settings" id="p-dock-bottom"> 1032 <ul> 1033 <li> 1034 1035 <button class="cdx-button cdx-button--icon-only vector-limited-width-toggle" id=""><span class="vector-icon mw-ui-icon-fullScreen mw-ui-icon-wikimedia-fullScreen"></span> 1036 1037 <span>Toggle limited content width</span> 1038 </button> 1039 </li> 1040 </ul> 1041 </div> 1042 <script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw1430","wgBackendResponseTime":138,"wgPageParseReport":{"limitreport":{"cputime":"0.405","walltime":"0.579","ppvisitednodes":{"value":4436,"limit":1000000},"postexpandincludesize":{"value":39075,"limit":2097152},"templateargumentsize":{"value":2197,"limit":2097152},"expansiondepth":{"value":15,"limit":100},"expensivefunctioncount":{"value":11,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":96692,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 491.091 1 -total"," 36.90% 181.212 2 Template:Reflist"," 25.00% 122.753 9 Template:Cite_journal"," 16.31% 80.112 8 Template:R"," 14.82% 72.794 9 Template:R/ref"," 11.76% 57.771 1 Template:Short_description"," 9.94% 48.796 9 Template:R/superscript"," 7.94% 38.989 1 Template:Val"," 6.75% 33.131 2 Template:Pagetype"," 6.07% 29.797 17 Template:R/where"]},"scribunto":{"limitreport-timeusage":{"value":"0.187","limit":"10.000"},"limitreport-memusage":{"value":9303486,"limit":52428800}},"cachereport":{"origin":"mw1350","timestamp":"20231125191829","ttl":1814400,"transientcontent":false}}});});</script> 1043 <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Xorshift","url":"https:\/\/en.wikipedia.org\/wiki\/Xorshift","sameAs":"http:\/\/www.wikidata.org\/entity\/Q2576999","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q2576999","author":{"@type":"Organization","name":"Contributors to Wikimedia projects"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2008-04-24T17:36:25Z","dateModified":"2023-09-27T06:08:45Z","image":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/e\/ee\/Xorshift.png","headline":"class of pseudorandom number generators which generate the next number in their sequence by repeatedly taking the xor of a number with a bit-shifted version of itself"}</script> 1044 </body> 1045 </html>