有没有办法在JavaScript中生成指定范围内的随机数(例如1到6:1,2,3,4,5或6)?
math/rand生成非负数的所有整数函数.
rand.Int() int // [0, MaxInt]
rand.Int31() int32 // [0, MaxInt32]
rand.Int31n(n int32) int32 // [0, n)
rand.Int63() int64 // [0, MaxInt64]
rand.Int63n(n int64) int64 // [0, n)
rand.Intn(n int) int // [0, n)
Run Code Online (Sandbox Code Playgroud)
我想生成[-m,n]范围内的随机数.换句话说,我想生成正数和负数的混合.
我最近一直在阅读Google Protocol Buffers,它允许在消息中使用各种标量值类型.
根据他们的文档,有三种类型的可变长度整数原语- int32,uint32和sint32.在他们的文档中,他们指出int32"编码负数的效率低 - 如果您的字段可能有负值,请sint32改用." 但是如果你有一个没有负数的字段,我认为uint32将是一个比使用更好的类型int32(由于额外的位和处理负数的CPU成本降低).
那么什么时候int32使用是一个很好的标量?文档是否意味着只有当您很少得到负数时它才是最有效的?或者它总是优先使用,sint32并uint32取决于该领域的内容?
(同样的问题也适用于这些标量的64位版本,以及:int64,uint64,和sint64,但我离开他们出了问题描述为可读性的缘故.)
为了简化问题,我想说我想a / (b - c)在floats 上计算表达式.
为了确保结果是有意义的,我可以检查b和c是相等的:
float EPS = std::numeric_limits<float>::epsilon();
if ((b - c) > EPS || (c - b) > EPS)
{
return a / (b - c);
}
Run Code Online (Sandbox Code Playgroud)
但是我的测试表明,如果可能的话,不能保证有意义的结果,也不能不提供结果.
a = 1.0f;
b = 0.00000003f;
c = 0.00000002f;
Run Code Online (Sandbox Code Playgroud)
结果:不满足if条件,但表达式将生成正确的结果100000008(与浮点数的精度相同).
a = 1e33f;
b = 0.000003;
c = 0.000002;
Run Code Online (Sandbox Code Playgroud)
结果:满足if条件,但表达式不会产生有意义的结果+1.#INF00.
我发现检查结果更可靠,而不是参数:
const float INF = numeric_limits<float>::infinity();
float x = a / (b - c); …Run Code Online (Sandbox Code Playgroud) 我有一个奇怪的问题:我有64个数字的列表永远不会改变:
(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128)
Run Code Online (Sandbox Code Playgroud)
我需要一个Python数据结构,这将允许我使用1-64索引而不是标准0-63来获取这些数字.这可能吗?完成此任务的最佳方法是建立字典吗?
我的C11标准来自这里。这一段说:
\n\n\n当实浮点类型的有限值转换为_Bool以外的整数类型时,小数部分将被丢弃(即该值被截断为零)。如果整数部分的值不能用整数类型表示,则行为未定义。[61]
\n
脚注 61 说:
\n\n\n当实浮点类型的值转换为无符号类型时,不需要执行整数类型的值转换为无符号类型时执行的余数运算。因此,可移植实浮点值的范围为(\xe2\x88\x921, U type _MAX +1)
\n
我的困惑主要是关于unsigned int. 我目前的理解如下:
float a = 3.14;\nuint32_t b = (uint32_t)a; // defined, b == 3\n\nfloat a = -1.23;\nuint32_t b = (uint32_t)a; // UB!\n\nfloat a = 2147483646.0; // defined\nuint32_t b = (uint32_t)a; // defined, b == 2147483646\nuint8_t c = (uint8_t )a; // UB!\nRun Code Online (Sandbox Code Playgroud)\n它是否正确?
\n我们一直在使用Math.random获取4000-64000之间的随机数:
Math.floor(Math.random() * 60000 + 4000);
Run Code Online (Sandbox Code Playgroud)
我们现在必须使用更加加密的安全随机数生成器来替换它.在搜索了这个问题之后,我们决定使用window.crypto.getRandomValues.我无法弄清楚如何使用它来获得特定范围之间的随机数.有人可以帮忙吗?
我想创建一个从 1 到 52 的列表。(例如一副纸牌)我只是想知道你如何制作一个包容性的清单?
我知道如何列出清单,只是不确定如何使其具有包容性。我在这里搜索了一段时间,并没有真正找到任何有用的东西。
random ×3
javascript ×2
python ×2
c ×1
epsilon ×1
go ×1
java ×1
list ×1
primitive ×1
python-3.x ×1