Az rnd2 Javában, és C#-ban. Ugyanez a kód fordul mindkét nyelven.public class Rnd2 {
private static long __seed0, __seed1, __seed2, __seed3;
private static long __rol(long value, long offset)
{
offset = offset & 0x1f;
return (value << offset) | (value >> (0x20 - offset));
}
private static long __ror(long value, long offset)
{
offset = offset & 0x1f;
return (value >> offset) | (value << (0x20 - offset));
}
public static void srnd2(long seed)
{
__seed0 = seed;
__seed1 = __seed0 ^ 0xaaaaaaaa;
__seed1 = __rol(__seed1 >> 11, __seed1);
__seed1 = __seed1 ^ (__seed1 >> 21);
__seed2 = __seed0 ^ 0x55555555;
__seed2 = __ror(__seed2 << 6, __seed2);
__seed2 = __seed2 ^ (__seed2 >> 22);
__seed3 = (__seed2 << 16) | (__seed1 >> 16);
}
public static long rnd2()
{
__seed1 = __rol(__seed1, 5);
__seed2 = __ror(__seed2, 9);
__seed0 = __rol(__seed0, 11);
__seed0 ^= __seed1;
__seed0 ^= __rol(__seed1, 8) << 11;
__seed0 ^= __ror(__seed2, 8) & 63;
__seed0 ^= __rol(__seed3, 8) >> 5;
__seed0 = __ror(__seed0, 14);
__seed0 ^= __seed3;
__seed1 ^= __seed3;
__seed2 ^= __seed3;
__seed3 = __ror(__seed3, __seed0);
return __seed0;
}
} És erről beszéltem, hogy ilyesmit csak úgy lehet megvalósítani, ha osztályba csomagolod (jó, van private, de azt C-ben marha egyszerű megoldani, ha valami olyasmi van benne, amihez nem szeretnéd ha hozzáférhetne a júzer: írsz hozzá egy headert). Nem baj, most már megvan Javában is, fel lehet használni, ha valakinek kell egy biztonságosabb randomgenerátor.
PS C:\Users\kemi242\Desktop\csc> measure-command {.\c.exe}
Days : 0
Hours : 0
Minutes : 0
Seconds : 19
Milliseconds : 573
Ticks : 195737779
TotalDays : 0,000226548355324074
TotalHours : 0,00543716052777778
TotalMinutes : 0,326229631666667
TotalSeconds : 19,5737779
TotalMilliseconds : 19573,7779
PS C:\Users\kemi242\Desktop\csc> measure-command {.\cO3.exe}
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 934
Ticks : 9344770
TotalDays : 1,08157060185185E-05
TotalHours : 0,000259576944444444
TotalMinutes : 0,0155746166666667
TotalSeconds : 0,934477
TotalMilliseconds : 934,477
PS C:\Users\kemi242\Desktop\csc> measure-command {.\cpp.exe}
Days : 0
Hours : 0
Minutes : 0
Seconds : 19
Milliseconds : 345
Ticks : 193457625
TotalDays : 0,000223909288194444
TotalHours : 0,00537382291666667
TotalMinutes : 0,322429375
TotalSeconds : 19,3457625
TotalMilliseconds : 19345,7625
PS C:\Users\kemi242\Desktop\csc> measure-command {.\cppO3.exe}
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 936
Ticks : 9366554
TotalDays : 1,08409189814815E-05
TotalHours : 0,000260182055555556
TotalMinutes : 0,0156109233333333
TotalSeconds : 0,9366554
TotalMilliseconds : 936,6554
PS C:\Users\kemi242\Desktop\csc> measure-command {.\cs.exe}
Days : 0
Hours : 0
Minutes : 0
Seconds : 9
Milliseconds : 5
Ticks : 90057451
TotalDays : 0,00010423316087963
TotalHours : 0,00250159586111111
TotalMinutes : 0,150095751666667
TotalSeconds : 9,0057451
TotalMilliseconds : 9005,7451
PS C:\Users\kemi242\Desktop\csc> measure-command {java -jar java.jar}
Days : 0
Hours : 0
Minutes : 0
Seconds : 3
Milliseconds : 983
Ticks : 39838856
TotalDays : 4,6109787037037E-05
TotalHours : 0,00110663488888889
TotalMinutes : 0,0663980933333333
TotalSeconds : 3,9838856
TotalMilliseconds : 3983,8856
Teszteltem a C/C++-t default, meg -O3 kapcsolóval is, az utóbbi jóval gyorsabb a cisztánál meg a dzsuvánál, viszont a default még az előző rand-os verziónál is lassabb lett. |