8

MDN から ( https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/random ):

Math.random

[0, 1) 0 (含む) から 1 (含まない) までの範囲の浮動小数点の疑似乱数を返します。

しかし、それは言う:

JavaScript の数値は IEEE 754 浮動小数点数であり、最も近い偶数に丸められるため、Math.random()それ自体の範囲を除いて、これらの範囲は正確ではなく、境界によっては非常にまれなケースで可能であることに注意してください ( 2^62 の 1 のオーダー) を使用して、通常は除外される上限を計算します。

それらのケースを検討する必要がありますか?たとえば、使用...

Math.min(max, Math.floor(Math.random() * (max - min + 1)) + min);

...それ以外の...

Math.floor(Math.random() * (max - min + 1)) + min;

...?

4

2 に答える 2

2

いいえ。「正確さ」や奇妙なエッジケースよりも、明快さとシンプルさを優先してください。このより複雑なコードは、このコードを維持している一部の貧弱な開発者 (またはおそらく将来のあなた) をつまずかせる可能性があります。その確率は、Math.random() が期待どおりに機能しない 2^62 分の 1 の確率よりも大きくなります。

于 2013-05-26T02:55:34.713 に答える