这与这个问题有关 - 在C++中生成随机数...第一个数字不是很随机
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
srand((unsigned int)time(NULL));
cout << rand() / double(RAND_MAX) << endl;
cout << rand() / double(RAND_MAX) << endl;
cout << rand() / double(RAND_MAX) << endl;
cout << rand() / double(RAND_MAX) << endl;
cout << rand() / double(RAND_MAX) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果一遍又一遍地运行二进制(.exe),您会注意到第一个结果始终具有相同的前三个数字.例如每次运行总是0.54xxxxx.
不,这不是因为我发现没有任何模式.并且在每次运行之间等待几秒也没有帮助.
编辑:只有第一个结果具有前三个相同的数字.其余的都是"随意看".此外,生成器使用srand()(在上面的代码示例的第一行)上播种.
test = function(x){
if ( some conditions ) { return true; }
else { return false; }
}
if (test(y)) {document.write("You have done this before!")?}?;?
console.log("Checked!");
Run Code Online (Sandbox Code Playgroud)
目的是检查用户过去是否执行了某些操作.这些只是模拟代码,虽然没有真正反映我实际在做什么.
题:
我对node.js比较新,所以如果这听起来微不足道,请原谅我.假设测试(y)为真.我能确定在document.write之后执行console.log吗?即使测试(y)需要很长时间才能运行?
换句话说,我需要"if(test(y))..."来阻止.我理解将函数作为参数传递,例如setInterval(test(y),100); 可以是异步和非阻塞.但是"if(test(y))......"怎么样?
假设我有一组已排序的双打.
{ 0.124, 4.567, 12.3 }
Run Code Online (Sandbox Code Playgroud)
一个正的,非零的double是由代码的另一部分创建的,需要在保持排序的同时插入到该集合中.例如,如果创建的double是7.56,则最终结果是,
{ 0.124, 4.567, 7.56, 12.3 }
Run Code Online (Sandbox Code Playgroud)
在我的代码中,这个"创建双重并插入有序集合"过程然后重复了很多次.可能是500k到100万次.我不知道总共会创造多少双打,但我知道上限.
尝试
我天真的第一种方法是创建一个长度=上限的数组,并用零填充它,然后添加初始的双精度集("add"=用双精度替换0值的数据).每当创建一个double时,我将它添加到数组并执行插入排序,我读到这对排序有序数组很有用.
题
我有一种感觉,运行500k到100万插槽将是一个严重的性能问题.(或者我错了?)在C中是否有更高效的数据结构和/或算法?
编辑:
我想保持集合排序的原因是因为在每次"创建双重并插入有序集合"过程之后,我需要能够查找该集合中的最小元素(并且可能通过将其替换为0来删除它) ).我认为最好的方法是保持集合排序.
但如果情况不是这样,也许还有另一种选择吗?
e = realmin;
x = 1 - e;
fprintf('x is %g',x);
Run Code Online (Sandbox Code Playgroud)
生产x is 1.但是,我试图设置x为1减去一个小epsilon,它等于realmin.
如何停止四舍五入?