Ku mojemu zaskoczeniu wyszło praktycznie identycznie w obu przypadkach (jednostki to linuxowe "clocki" na 1mld liczb wygenerowanych):

Kod testujący:
#include "splitmix64.c"
#include "xoshiro256plusplus.c"
#include <stdio.h>
#include <time.h>
#define NNN 1000 000 000
int main(void) {
uint64_t r = 123456789;
while (1) {
time_t tm = 0;
tm = clock();
for (int i = 0; i < NNN; i++) {
r ^= xorshiro256pp_next();
}
tm = clock() - tm;
printf("xorshiro256++ (%llx): %llu\n", r, tm);
fflush(stdout);
tm = clock();
for (int i = 0; i < NNN; i++) {
r ^= splitmix64_next();
}
tm = clock() - tm;
printf("splitmix64 (%llx): %llu\n", r, tm);
fflush(stdout);
}
return 0;
}
Stawiałem, że ten z mnożeniem będzie jednak wolniejszy, a tu proszę :)
Sprzęt: Core i7 6900K, Ubuntu 64-bit