<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: the_othernet</title><link>https://news.ycombinator.com/user?id=the_othernet</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 06 Apr 2026 21:12:14 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=the_othernet" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[biski64 – Fast C PRNG (.42ns), 2^64 Period, BigCrush/PractRand Pass]]></title><description><![CDATA[
<p>biski64 is a fast C PRNG I wrote for non-cryptographic tasks.<p>GitHub (MIT): <a href="https://github.com/danielcota/biski64">https://github.com/danielcota/biski64</a><p>Highlights:<p>* ~0.42 ns/value (GCC 11.4, -O3 -march=native), 92% faster than xoroshiro128++.<p>* Easily passes PractRand (32TB), exceptional BigCrush results (running BigCrush 100 times against established PRNGs).<p>* Guaranteed 2^64 period - through the use of a 64-bit Weyl sequence.<p>* Parallel streams, robust reduced state size tests.<p>* Core requires only stdint.h.<p>Details on the 100x BigCrush tests (including reference PRNG results), parallel streams and reduced state size tests can be found in the Github README).<p>Seeking feedback on design, use cases, or further testing.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44097398">https://news.ycombinator.com/item?id=44097398</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 26 May 2025 13:48:22 +0000</pubDate><link>https://github.com/danielcota/biski64</link><dc:creator>the_othernet</dc:creator><comments>https://news.ycombinator.com/item?id=44097398</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44097398</guid></item><item><title><![CDATA[New comment by the_othernet in "Show HN: LoopMix128 – Fast C PRNG (.46ns), 2^128 Period, BigCrush/PractRand Pass"]]></title><description><![CDATA[
<p>NOTE: I found a counterexample using Z3 Solver in which fast_loop maps to itself (0x5050a1e1d03b6432). A new version will be released with fast_loop and slow_loop as simple Weyl Sequences.</p>
]]></description><pubDate>Mon, 12 May 2025 02:32:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=43959117</link><dc:creator>the_othernet</dc:creator><comments>https://news.ycombinator.com/item?id=43959117</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43959117</guid></item><item><title><![CDATA[New comment by the_othernet in "Show HN: LoopMix128 – Fast C PRNG (.46ns), 2^128 Period, BigCrush/PractRand Pass"]]></title><description><![CDATA[
<p>What a great set of feedback. Thank you! I'll look at it as an acton item list.<p>And you are so right about being just one month in.  Every time I think I'm starting to understand what's going on here, I realize the maze just keeps getting deeper.</p>
]]></description><pubDate>Sun, 11 May 2025 23:08:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=43958044</link><dc:creator>the_othernet</dc:creator><comments>https://news.ycombinator.com/item?id=43958044</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43958044</guid></item><item><title><![CDATA[New comment by the_othernet in "Show HN: LoopMix128 – Fast C PRNG (.46ns), 2^128 Period, BigCrush/PractRand Pass"]]></title><description><![CDATA[
<p>Using only 32bit fast_loop and mix (for 64bits of state) passes PractRand with 64bit output up to 256GB with only one unusual. That's about a 100 bit LCG equivalent?
I did have to alter the output to be "(GR * mix) + fast_loop" and change the rotation constants to be 12 and 5.</p>
]]></description><pubDate>Sun, 11 May 2025 09:25:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=43952540</link><dc:creator>the_othernet</dc:creator><comments>https://news.ycombinator.com/item?id=43952540</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43952540</guid></item><item><title><![CDATA[New comment by the_othernet in "Show HN: LoopMix128 – Fast C PRNG (.46ns), 2^128 Period, BigCrush/PractRand Pass"]]></title><description><![CDATA[
<p>Added the Romu variants to benchmark.c.  Here are the current results:<p>LoopMix128 ns/call:     0.380 ns<p>xoroshiro128++ ns/call: 0.757 ns<p>wyrand ns/call:         0.379 ns<p>PCG64 ns/call:          0.757 ns<p>RomuQuad ns/call:       0.575 ns<p>RomuDuoJr ns/call:      0.416 ns</p>
]]></description><pubDate>Sun, 11 May 2025 04:38:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=43951421</link><dc:creator>the_othernet</dc:creator><comments>https://news.ycombinator.com/item?id=43951421</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43951421</guid></item><item><title><![CDATA[New comment by the_othernet in "Show HN: LoopMix128 – Fast C PRNG (.46ns), 2^128 Period, BigCrush/PractRand Pass"]]></title><description><![CDATA[
<p>Using only 32bit fast_loop and mix (for 64bits of state) passes PractRand up to 256GB with only one unusual.  That's about a 90 bit state LCG equivalent?<p>I did have to alter the output to be "(GR * mix) + fast_loop" and change the rotation constants to be 12 and 5.</p>
]]></description><pubDate>Sun, 11 May 2025 03:41:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=43951165</link><dc:creator>the_othernet</dc:creator><comments>https://news.ycombinator.com/item?id=43951165</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43951165</guid></item><item><title><![CDATA[New comment by the_othernet in "Show HN: LoopMix128 – Fast C PRNG (.46ns), 2^128 Period, BigCrush/PractRand Pass"]]></title><description><![CDATA[
<p>Super useful link.  Thank you!</p>
]]></description><pubDate>Sun, 11 May 2025 02:45:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=43950878</link><dc:creator>the_othernet</dc:creator><comments>https://news.ycombinator.com/item?id=43950878</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43950878</guid></item><item><title><![CDATA[New comment by the_othernet in "Show HN: LoopMix128 – Fast C PRNG (.46ns), 2^128 Period, BigCrush/PractRand Pass"]]></title><description><![CDATA[
<p>I'll have to re-optimize the rotations for the smaller state size, but I will do it and report here.</p>
]]></description><pubDate>Sun, 11 May 2025 01:59:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=43950634</link><dc:creator>the_othernet</dc:creator><comments>https://news.ycombinator.com/item?id=43950634</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43950634</guid></item><item><title><![CDATA[New comment by the_othernet in "Show HN: LoopMix128 – Fast C PRNG (.46ns), 2^128 Period, BigCrush/PractRand Pass"]]></title><description><![CDATA[
<p>I wasn't able to analyze the cyclic behavior of the mix directly, but for the purpose of minimal period only fast_loop and slow_loop are used (as a 128bit counter).</p>
]]></description><pubDate>Sat, 10 May 2025 23:36:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=43949924</link><dc:creator>the_othernet</dc:creator><comments>https://news.ycombinator.com/item?id=43949924</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43949924</guid></item><item><title><![CDATA[New comment by the_othernet in "Show HN: LoopMix128 – Fast C PRNG (.46ns), 2^128 Period, BigCrush/PractRand Pass"]]></title><description><![CDATA[
<p>Hello!  Awesome work on your hashing by the way!<p>When iterating I first tried to make fast_loop as random as possible by trying all possible rotational values and then having each option tested in PractRand 1000 times from 256M to 8GB.  There was a wide range of performance by rotation.  47 was the best (for the GR constant) and resulted in the most tests being passed.  The goal was a stronger than normal core for the PRNG that could feed actively into mix.<p>I found the multiplication to be necessary for passing PractRand and BigCrush with the state mixing as posted.<p>I had a variant which assigned mix as rotate(mix,constant) + (mix^fast_mix).  That would pass cleanly with mix directly outputted (with no multiplication) - but I couldn’t get Z3 prover to show injectivity so I decided to go with the posted route.</p>
]]></description><pubDate>Sat, 10 May 2025 23:30:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=43949888</link><dc:creator>the_othernet</dc:creator><comments>https://news.ycombinator.com/item?id=43949888</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43949888</guid></item><item><title><![CDATA[New comment by the_othernet in "Show HN: LoopMix128 – Fast C PRNG (.46ns), 2^128 Period, BigCrush/PractRand Pass"]]></title><description><![CDATA[
<p>I have an offline poker app, and a user asked me what the algorithm was to generate the random numbers.  That was a month ago. :)</p>
]]></description><pubDate>Sat, 10 May 2025 23:11:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=43949771</link><dc:creator>the_othernet</dc:creator><comments>https://news.ycombinator.com/item?id=43949771</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43949771</guid></item><item><title><![CDATA[New comment by the_othernet in "Show HN: LoopMix128 – Fast C PRNG (.46ns), 2^128 Period, BigCrush/PractRand Pass"]]></title><description><![CDATA[
<p>Just added to benchmark.c in the Github.  Performance is comparable to xoroshiro128++.</p>
]]></description><pubDate>Sat, 10 May 2025 23:09:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=43949760</link><dc:creator>the_othernet</dc:creator><comments>https://news.ycombinator.com/item?id=43949760</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43949760</guid></item><item><title><![CDATA[New comment by the_othernet in "Show HN: LoopMix128 – Fast C PRNG (.46ns), 2^128 Period, BigCrush/PractRand Pass"]]></title><description><![CDATA[
<p>I just added PGC64 to benchmark.c in the Github.  PCG64 speed looks to be about the same as xoroshiro128++.</p>
]]></description><pubDate>Sat, 10 May 2025 23:08:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=43949758</link><dc:creator>the_othernet</dc:creator><comments>https://news.ycombinator.com/item?id=43949758</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43949758</guid></item><item><title><![CDATA[Show HN: LoopMix128 – Fast C PRNG (.46ns), 2^128 Period, BigCrush/PractRand Pass]]></title><description><![CDATA[
<p>LoopMix128 is a fast C PRNG I wrote for non-cryptographic tasks.<p>GitHub (MIT): <a href="https://github.com/danielcota/LoopMix128">https://github.com/danielcota/LoopMix128</a><p>Highlights:<p>* ~0.37 ns/value (GCC 11.4, -O3 -march=native), 98% faster than xoroshiro128++ and PCG64.<p>* Passes TestU01 BigCrush & PractRand (32TB).<p>* Guaranteed 2^128 period.<p>* Proven injective (192-bit state) via Z3 SMT solver; allows parallel streams.<p>* Core requires only stdint.h.<p>Seeking feedback on design, use cases, or further testing.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43949134">https://news.ycombinator.com/item?id=43949134</a></p>
<p>Points: 76</p>
<p># Comments: 34</p>
]]></description><pubDate>Sat, 10 May 2025 21:25:21 +0000</pubDate><link>https://github.com/danielcota/LoopMix128</link><dc:creator>the_othernet</dc:creator><comments>https://news.ycombinator.com/item?id=43949134</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43949134</guid></item><item><title><![CDATA[Show HN: DualMix128 – A fast, simple PRNG passing PractRand (32TB) and BigCrush]]></title><description><![CDATA[
<p>Hi HN,<p>I'd like to share DualMix128, a pseudo-random number generator I developed. It's written in C and achieves very high speed while maintaining strong statistical properties for non-cryptographic use.<p>GitHub (MIT License): <a href="https://github.com/the-othernet/DualMix128">https://github.com/the-othernet/DualMix128</a><p>Key points:<p>* *Fast:* Benchmarked at ~0.36 ns per 64-bit generation on GCC 11.4 (-O3 -march=native). This was over 2x faster than `xoroshiro128++` (~0.74 ns) and competitive with `wyrand` (~0.36 ns) in the same tests. (Benchmark code/results in repo).<p>* *Robust:* Passes the full TestU01 BigCrush suite and PractRand up to 32TB with no anomalies reported. (Test harnesses/logs in repo).<p>* *Simple Algorithm:* Uses a 128-bit state (two `uint64_t`) with simple mixing based on addition, XOR, rotation, and a final multiplication by the golden ratio constant.<p>* *C Implementation:* Minimal dependencies (`stdint.h` for core), straightforward C code.<p>This came out of exploring simple constructions for efficient PRNGs that still hold up under heavy statistical testing.<p>Curious to hear feedback on the design, performance, potential applications, or any weaknesses you might spot. Thanks!</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43893388">https://news.ycombinator.com/item?id=43893388</a></p>
<p>Points: 5</p>
<p># Comments: 1</p>
]]></description><pubDate>Mon, 05 May 2025 10:04:54 +0000</pubDate><link>https://github.com/the-othernet/DualMix128</link><dc:creator>the_othernet</dc:creator><comments>https://news.ycombinator.com/item?id=43893388</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43893388</guid></item></channel></rss>