RDM из OSCAT'а на длине 1'000'000 бит
Проходит 3 теста:
Rank
FFT
LinearComplexity
Не проходит:
Frequency (проходит 0 из 10)
BlockFrequency (проходит 3 раза из 10)
CumulativeSums (0 из 10)
Runs (0 из 10)
LongestRun (проходит 9 раз из 10)
NonOverlappingTemplate
OverlappingTemplate (7 из 10)
Universal (9 из 10)
ApproximateEntropy (0 из 10)
Serial
Код:// Переписано отсюда: https://github.com/simsum/oscat/blob/master/RDM.EXP unsigned int bit_count(unsigned int n) { unsigned int c; for (c=0;n>0;n=n&(n-1)) c++; return c; } unsigned int rol(unsigned int x, unsigned int n){ return (x<<n)|(x>>(32-n)); } float rdm(float last) { float rdm; tn = T_PLC_MS; tc = bit_count(tn); tn |= (tn&(1<<(2)))<<(31-2); tn |= (tn&(1<<(5)))<<(30-5); tn |= (tn&(1<<(4)))<<(29-4); tn |= (tn&(1<<(1)))<<(28-1); tn |= (tn&(1<<(0)))<<(27-0); tn |= (tn&(1<<(7)))<<(26-7); tn |= (tn&(1<<(6)))<<(25-6); tn |= (tn&(1<<(3)))<<(24-3); tn = rol(tn, bit_count(tn)) | 0x80000001; tn = tn % 71474513 + (tc + 77); rdm = ((float)tn) / 10000000.0 * (E - (last<0.0 ? 0 : (last>1.0?1.0:last) )); rdm = rdm - floor(rdm); T_PLC_MS+=10; return rdm; }




