-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; その数は非常に多く、現実的ではありません。

randのth値を1.98andに変更する方法は5.08?これを解決する方法は?

各doubleを「。」の後の小数点以下2桁に変更する必要があります。

私はubuntuの下でc++で働いています。

Thxありがとう

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)。これに範囲制限を掛けると、必要な数値が得られます。

注: これは数値を小数点以下 2 桁に制限するものではありません。小数点以下 2 桁で出力するには、次のようにします。

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 に答える