我目前无法生成-32.768和32.768之间的随机数。它一直给我相同的值,但十进制字段有很小的变化。例如:27.xxx。
这是我的代码,任何帮助将不胜感激。
#include <iostream> #include <ctime> #include <cstdlib> using namespace std; int main() { srand( time(NULL) ); double r = (68.556*rand()/RAND_MAX - 32.768); cout << r << endl; return 0; }
我应该提一下,如果您使用的是C ++ 11编译器,则可以使用类似这样的东西,它实际上更易于阅读,更难弄乱:
#include <random> #include <iostream> #include <ctime> int main() { //Type of random number distribution std::uniform_real_distribution<double> dist(-32.768, 32.768); //(min, max) //Mersenne Twister: Good quality random number generator std::mt19937 rng; //Initialize with non-deterministic seeds rng.seed(std::random_device{}()); // generate 10 random numbers. for (int i=0; i<10; i++) { std::cout << dist(rng) << std::endl; } return 0; }
正如bames53所指出的,如果您充分利用c ++ 11,可以使上述代码更短:
#include <random> #include <iostream> #include <ctime> #include <algorithm> #include <iterator> int main() { std::mt19937 rng; std::uniform_real_distribution<double> dist(-32.768, 32.768); //(min, max) rng.seed(std::random_device{}()); //non-deterministic seed std::generate_n( std::ostream_iterator<double>(std::cout, "\n"), 10, [&]{ return dist(rng);} ); return 0; }