实施 Mersenne Twister 时是否应将此数字减去 1?
Should this number be subtracted by 1 when implementing the Mersenne Twister?
我发现 this snippet online along with this Whosebug post 可以将其转换为 TypeScript class。
我基本上是一字不差地复制粘贴(因为我没有资格修改这种密码),但是我注意到VS Code在最后一个函数中有一点下划线:
/**
* 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);
}
特别是 9007199254740992.0
VS 代码说 Numeric literals with absolute values equal to 2^53 or greater are too large to be represented accurately as integers.ts(80008)
我注意到,如果我将该数字减一,而不是 9007199254740991.0
,那么警告就会消失。但我不一定要修改代码并破坏它,如果这确实是一个显着差异。
基本上,我不确定,因为虽然我的直觉说数字溢出是不好的,但我的直觉 也 说我不应该尝试修复密码代码post在几个地方编辑过,因为它可能是正确的。
但是是吗?或者这个数字应该减一?
9007199254740992
是要在 [0,1] 中使用统一值的正确值,即 0.0 <= x < 1.0
.
这只是自动出错,这个值可以用 JavaScript Number
准确表示,即 64 位浮点数。它只是 253 并且二进制 IEEE 754 浮点数对于这种形式的数字没有问题(它甚至可以用 32 位浮点数准确表示)。
使用 9007199254740991
将使范围 [0,1],即 0.0 <= x <= 1.0
。大多数库在 [0,1) 中生成统一的值,其他分布都是从中派生的,但是您显然可以自由地做最适合您的应用程序的事情。
请注意,取回最大值的实际机会为 2-53 (~1e-16),因此您不太可能在实践中看不到它。
我发现 this snippet online along with this Whosebug post 可以将其转换为 TypeScript class。
我基本上是一字不差地复制粘贴(因为我没有资格修改这种密码),但是我注意到VS Code在最后一个函数中有一点下划线:
/**
* 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);
}
特别是 9007199254740992.0
VS 代码说 Numeric literals with absolute values equal to 2^53 or greater are too large to be represented accurately as integers.ts(80008)
我注意到,如果我将该数字减一,而不是 9007199254740991.0
,那么警告就会消失。但我不一定要修改代码并破坏它,如果这确实是一个显着差异。
基本上,我不确定,因为虽然我的直觉说数字溢出是不好的,但我的直觉 也 说我不应该尝试修复密码代码post在几个地方编辑过,因为它可能是正确的。
但是是吗?或者这个数字应该减一?
9007199254740992
是要在 [0,1] 中使用统一值的正确值,即 0.0 <= x < 1.0
.
这只是自动出错,这个值可以用 JavaScript Number
准确表示,即 64 位浮点数。它只是 253 并且二进制 IEEE 754 浮点数对于这种形式的数字没有问题(它甚至可以用 32 位浮点数准确表示)。
使用 9007199254740991
将使范围 [0,1],即 0.0 <= x <= 1.0
。大多数库在 [0,1) 中生成统一的值,其他分布都是从中派生的,但是您显然可以自由地做最适合您的应用程序的事情。
请注意,取回最大值的实际机会为 2-53 (~1e-16),因此您不太可能在实践中看不到它。