-4

我有以下内容:

   int R=25;
double pi=3.14;

double r=R*sqrt(rand());
cout<<"r: "<<r<<endl;
double th=2*pi*rand();
cout<<"th: "<<theta<<endl;

我想转换:r=1.98 和 th=5.08。我还希望 double result=r*th 带有 2 个 zecimals。

当我打印时double result =r*th;这个数字非常庞大,不现实。

如何将randth值更改为1.98and 5.08?如何解决这个问题?

我需要在“。”之后将每个双精度数更改为仅 2 位小数。

我在 ubuntu 下使用 c++ 工作。

谢谢欣赏

4

2 回答 2

2

要在您指定的范围内生成随机值,请尝试以下操作:

r = (R*(rand()/(RAND_MAX + 1.0)));
th = (2*3.14*(rand()/(RAND_MAX + 1.0)));

该表达式rand()/(RAND_MAX+1.0)产生范围内的值[0,1.0)。将其乘以范围限制可以得到你想要的数字。

注意:这不会将数字限制为两位小数,这更多地取决于您如何打印它们。要使用两位小数打印它们,请尝试以下操作:

std::cout << std::fixed << std::setprecision(2) << r << "\n";
std::cout << std::fixed << std::setprecision(2) << th << "\n";
std::cout << std::fixed << std::setprecision(2) << (r*th) << "\n";

看到这个问题:C++生成随机数

于 2012-05-09T20:38:04.573 回答
0

如果您需要将两个数字缩小相同的数量,则只需将它们除以相同的数字即可。无论哪种方式,您都会失去大致相同的精度。

如果您真的想通过切断指数来完全改变结果,那么您可能会深入研究双数格式本身并分离出尾数。

你为什么要这样做对我来说是个谜。

于 2012-05-09T20:34:13.360 回答