Partly 1 of this sequence, we saw how easy it’s to foretell future values generated by a linear congruential PRNG. On this half, we will have a look at learn how to calculate previous values generated by a linear congruential PRNG. As we noticed before, going forward on a pseudo random quantity generator involves multiplying by the multiplier, including the addend, after which trimming the consequence again all the way down to 48 bits. Surely this may be solved by a easy subtraction and divide? It’s not that simple. As you can see, we have done the multiply, the add, then subtracted the addend, and divided by the multiplier, and the result’s nothing like the original seed. Why not? The problem is the bitmask we applied. When we applied the multiplier originally, it overflowed past 48 bits. The most vital bits had been discarded, which means that a simple divide cannot get us the result. So how can we discover the consequence? The answer comes in going back to main faculty.
In major faculty we learnt how one can do lengthy multiplication. As an instance that the first number is our multiplier, it is the known, and the second number is the unknown that we would like to find out. The ultimate quantity is the seed that we’ve got, trimmed all the way down to the variety of bits, it is known, but the excess bits are not. It ought to be clear from the above that there is a sample, for each 1 in the second quantity, there is a corresponding first quantity on the road under. We can also see that if the final digit of the unique quantity was 0, then the last digit of the brand new number will be 0, if it was 1, then the new quantity will be 1. In the above instance we can decide therefore that the final digit in the original number was 1. Because we know that, subtract the multiplier from our seed, and reverse the consequences of the value of the final quantity in the unique number.