mercredi 30 juin 2021

Should this number be subtracted by 1 when implementing the Mersenne Twister?

I found this snippet online along with this Stackoverflow post which converts it into a TypeScript class.

I basically copy and pasted it verbatim (because I am not qualified to modify this sort of cryptographic code), but I noticed that VS Code has a little underline in the very last function:

/**
 * generates a random number on [0,1) with 53-bit resolution
 */
nextNumber53(): number {
  let a = this._nextInt32() >>> 5;
  let b = this._nextInt32() >>> 6;
  
  return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0);
}

Specifically the 9007199254740992.0

VS Code says Numeric literals with absolute values equal to 2^53 or greater are too large to be represented accurately as integers.ts(80008)

I notice that if I subtract that number by one and instead make it 9007199254740991.0, then the warning goes away. But I don't necessarily want to modify the code and break it if this is indeed a significant difference.

Basically, I am unsure, because while my intuition says that having a numerical overflow is bad, my intuition also says that I shouldn't try to fix cryptographic code that was posted in several places, as it is probably correct.

But is it? Or should this number be subtracted by one?




Aucun commentaire:

Enregistrer un commentaire