R, 24 22 bytes
Edit: -1 byte thanks to pajonk
runif(scan())*4^64%/%1
Try it online!
Output is an integer uniformly selected from the range 0
...2^128-1
.
R does not natively support 128-bit inteters, so the data type of the output is a floating-point representation (click here for a TIO link that dispays all the digits, instead of displaying in scientific notation). Note though that although 128-bit numbers can be represented using floating-point variables, rounding inaccuracies can occur when more than 53 bits are required.
If floating point output (with its associated rounding inaccuracies) isn't Ok, we can output the exact value in the form of a vector of binary digits for 35 bytes (or flattened into a string of bits for 41 bytes).
If neither floating point nor binary output are Ok, then base-R will struggle a bit, but we can still manage by constructing string of random 0
-9
digits (so including leading zeros), and checking that its lexicographically smaller than "340282366920938463463374607431768211456"
, for a whopping 117 113 bytes:
for(i in 1:scan())show({while((a=Reduce(paste0,sample(0:9,39,T)))>"340282366920938463463374607431768211456")0;a})