• 締切済み

C++について

倍率を求めたいのですが,メルセンヌツイスターを使って入力した変数にたいして1.5~3.0倍の値を表示したいのですがうまくいきません。入力した変数の値が仮に200だとして、倍率の1.6が出た場合160になるのですが私のは違う数値がでてきます。倍率の計算を知りたいです。ご助力お願いします

みんなの回答

  • asciiz
  • ベストアンサー率70% (6803/9674)
回答No.3

そのプログラム通りであるならば、 > attack *= R::Ramdom::get(1.5, 3.0);//ネームスペース::クラス名::そのクラスの関数 ここで 一度目に R::Ramdom::get(1.5, 3.0) を発生させたときの乱数値と > cout << "倍率は" << R::Ramdom::get(1.5, 3.0) << "なので、" << attack << "です" << endl; ここで表示に使っている R::Ramdom::get(1.5, 3.0) は、もう次の乱数が発生されて違うものになってしまうので、それと倍加された attack を合わせて表示したら計算が合わなくて当然でしょう。 multi = R::Ramdom::get(1.5, 3.0); attack *= multi; cout << "倍率は" << multi << "なので、" << attack << "です" << endl; と、1回だけ乱数を発生させればよいはずです。

OKLmgoggog
質問者

お礼

そういえばそうでした() 初歩的なミスでお恥ずかしい 助かりました、ありがとうございます。

  • asciiz
  • ベストアンサー率70% (6803/9674)
回答No.2

どのようなプログラムを書かれたのか提示いただかないと、どこにミスがあるのかもわかりません。 >C言語による乱数生成 >https://omitakahiro.github.io/random/random_variables_generation.html#Prepare_MT よくあるミスとしては、長い式の途中の割り算で 「整数/整数」をやってしまっていて、その部分で小数点が切り捨てられてしまったりとか。

OKLmgoggog
質問者

補足

int n; cout << "数値を入力?"; cin >> n; attack *= R::Ramdom::get(1.5, 3.0);//ネームスペース::クラス名::そのクラスの関数 cout << "倍率は" << R::Ramdom::get(1.5, 3.0) << "なので、" << attack << "です" << endl; R::Ramdom::get(1.5, 3.0)の中身は static double get(double min, double max) { if (min > max) swap(min, max); std::uniform_real_distribution range(min, max); return range(Ramdom::getInstance()); } もしやattack*=R::Ramdom::get(1.5,3.0)が間違っているのでしょうか?

  • dell_OK
  • ベストアンサー率13% (766/5721)
回答No.1

入力した変数の値が200で、倍率が1.6の場合は、320になるのではないでしょうか。 質問者さまの違う数値が320なら正しいと思います。

OKLmgoggog
質問者

補足

先ほどのは間違えました320でした。 今試しに200を入力して1.5を引いたら430が出てきましたw

関連するQ&A