Simple atomic pseudo-random number generation
Primarily I'm looking for confirmation that it actually is atomic. 


Yes, it appears atomic.



Other issues

Range and precision

randomicDouble() needs more functional explanation about  range and precision.  It seems to attempt an about linear distribution between [a...b]   (b included).

A range of [a...b)  (b excluded) is quite common.  So detailing the coding goal is important.

The code fails to provide a full precision random number.  Simple example: randomicDouble(1.0, 2.0) typically has about 253 different values in the [1.0...2.0) range and this code only supplies 232 different values.

With randomicDouble(), perhaps sometimes 2 calls to randomicNext() are needed.

To provide a linear distribution with randomicDouble(1.0, 4.0) is trickier given the change in absolute precision between  [1.0...2.0) and  [2.0...4.0). randomicDouble(0.0, 1.0) is even tricker.

Initialization

Code passes in only a 32-bit initialization whereas the state is 128-bit.  I'd expect at least a 64-bit initialization if not a full 128-bit one.



Mnior

20 is a magic number in for (int i = 0; i &lt; 20; i++) and deserves explanation.