• ベストアンサー

1万から100万の乱数を発生させるには?

■VBのバージョン : VB6 お世話になります。 斎藤と申します。 1万から100万までの乱数を発生させたいのですが e = CInt(Int((100000 - 10000 + 1) * Rnd() + 10000)) 公式に書いてあったサンプルを用いたこのコードだとオーバーバッファしてしまい 途方にくれています。 お知恵を拝借したいと存じます。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

オーバーフローしたのはCInt()関数を使用しているためです。 ご存知のようにCInt(n)はInteger型の値を返す関数ですから、nはInteger型で扱える数値の範囲を超えるものであってはいけません。 因みにInteger型変数の取りうる値の範囲は-32768~32767です。この範囲を超える整数を扱うのであれば、Long型の変数を使用します。 解決法としましては、CInt()をCLng()に変更するか、または、CInt()を削除してください。

mokukun
質問者

お礼

お世話になりました。斎藤です。 LucyDiamondさんに教えていて頂いたおかげで 問題が解決しました。ありがとうございました。

関連するQ&A

  • 乱数

    乱数を発生させる際に Sub Sample() Debug.Print Int((10 - 1 + 1) * Rnd + 1) End Sub で、1から10までの乱数を発生できますが、 1から10と言う連続した数字ではなく、 例えば10,13,18,43・・・ という規則性のない複数の数字からランダムに数字を発生させるにはどうすればいいでしょうか? 10,13,18,43の中から10を返したり、18を返したりする方法を教えてください。

  • VBA AからZで乱数を発生させたい

    Sub AからZで乱数を発生させる() Dim 最大値 As Integer Dim 最小値 As Integer Randomize 最小値 = 1 最大値 = 10 Debug.Print Int((最大値 - 最小値 + 1) * Rnd + 最小値) End Sub --------------------------------------------------------- これを実行すると、1から10の間で乱数を発生させられるのですが、 AからZの間で乱数を発生させたい場合は、 このコードをどのようにすればいいでしょうか? アドバイスよろしくお願いします。

  • 小文字、大文字、記号をランダム表示

    このプログラムは英大文字をランダムに表示するプログラムなのですが、これを小文字と記号も合わさった形で出力されるように改造するにはどうしたらいいでしょうか。コードを添えて下さると助かります。 import java.util.Random; public class Aruf{ public static void main(String[] args) { //Randomクラスのインスタンス化 Random rnd = new Random(); //変数の宣言 int ran; int a; char c; //10回繰り返す for(int b=0;b<10;b++){ //0~25の乱数を作成 ran = rnd.nextInt(26); //65を足して65~90にする a = 65 + ran; //charに型変換 c = (char)a; //表示 System.out.print(c); } } }

    • ベストアンサー
    • Java
  • PICマイコンによる乱数の表示について

    度々こちらで、お助け頂いております。 さて、今回の主旨はPICマイコンによりLCD表示器へ6個の数字を 表示する方法についてご質問させていただきました。 プログラミングはPIC用コンパイラCCS社のCコンパイラを使用し、 Micro chip社のMPLABと統合動作させています。 一般的なC言語と異なる部分があり、扱づらい面のあるコンパイラです。 では、問題のソースコードを次に記述します。 細部の設定や定義は省いて記述してあります。 1.void main() 2. { 3.int data,i; 4.srand((unsigned)time(ULL)); 5.data = 0; 6.表示器の初期化 7.カーソル位置をHomeへ 8.while(1) 9.{ 10.入力信号判定式 11.for(i = 0; i < 6; i++) 12. { 13. data=rand( )%6 + 1; 14. printf(lcd_data"%3d",data); 15. } 16.入力信号判定式 17.break; 18. } 19. } 以上、これだけのソースコードですが、コンパイルすると、 行番4コードがコンパイルエラーとなります。 (※英語のメッセージは読取れません。(勉強不足)) PICに関するrand( )とsrand( )関数について、いろいろと調べてみましたが、 それらに該当する項目が見当たりません。 そこで、行番4の部分をsrand(data);に変更したら、何とかコンパイル成功します。 それをPICに書込み、ターゲットに実装試験してみると、 100回乱数表示のうち、18回同じ組合せの数が出てしまいます。 どうも、srandの初期化が上手く出来てないみたいですが・・・ 何処が不具合となっているのでしょうか? また、同じソースコードをパソコンの標準Cで試してみると、 130回とも全てランダムに画面表示されます。 そこでどなた様か、PICに詳しい方のお知恵を拝借し、 ご指南頂けるなら、大変幸いに思います。 何卒宜しくお願い申し上げます。

  • VB.NETからC++で作成したdllの連携

    プログラム初心者です。 VB2010からC++で作成したdllへ配列を渡したいのですが、 動作するサンプルがありましたら教えてください。 単純な数値(int)であれば下記のページのサンプルコードをダウンロードして 動作可能でした。 http://www.geocities.jp/i_love_balard/myhome/vbdll.html しかし、以下のサンプルを作成したのですが、動作しませんでした。 http://www7.atwiki.jp/hisam/pages/51.html http://support.microsoft.com/kb/402577/ja http://support.microsoft.com/kb/410837/ja よろしくお願い致します。

  • 音声のコーデックについて

    コーデックの文章で以下の内容がどうしても理解できなかったので質問させていただきます。 「アナログ信号が、G711コーデックを使用してデジタル化された場合、20msの音声は160サンプル、8ビットから構成される。その結果は、160バイトの音声情報となる。G.729コーデックでエンコードされた場合、20msの音声は160サンプルで構成され、10サンプルが1つのグループとして10ビットのコードワードで表される。その結果は、160ビット(20バイト)の音声情報となる。」 「G.729コーデック(8kbps)の純粋な音声帯域幅はIPパケット全体のために3倍になる必要がある。しかし、この合計はまだ帯域幅の最終必要量ではなく、Layer2オーバヘッドを含まれていない。Layer2オーバヘッドなしでは、G.729は24Kbpsが必要となる。G.711ではLayer2オーバヘッドなしでは、80kbpsが必要となる。」 (1)エンコードされた場合、20msの音声は160サンプルで構成される。その結果は、160バイトの音声情報となるとありますが、どのように計算すればこのように求められるのでしょか? (2)10サンプルを1つのグループとし、10ビットのコードワードで表されるとは、どういう意味なのでしょうか?また、160ビット(20バイト)とはどのように計算すれば求められるのでしょうか? (3)Layer2オーバヘッドなしでは、G.729は24Kbpsの帯域幅が必要となるとありますが、24kbpsとは8kbpsの3倍という意味でよろしいのでしょうか?また、24Kbpsという値に何か根拠はあるのでしょうか?また、G.711ではLayer2オーバヘッドなしで、80kbpsが必要とありますが、どのような計算で求めれられるのでしょうか? 初歩的な質問ばかりですが、皆様のお知恵を拝借願います。よろしくお願いします。

  • 乱数発生

    自分でC++で乱数を発生させたいのですが、どのようなアリゴリズムで発生させればいいか教えてください。(時間を使うといいと聞きましたがどのように使うのでしょう)

  • 乱数の発生について

    0から99までの数値を1万個発生させ0~99の頻度を調べるプログラムを教えてください。 あと、できればそれを10セットデータをとってその平均を求めるプログラムも一緒にお願いします。

  • VB6の寿命

    10年ほど掛け、VB6を使って趣味で作ったプログラムがあります。 ソースコードが数万行あり、今さら新バージョンに移植する気力がありません。 現在は、XPで使用しておりますが、7や8上でもVB6は稼働するものなのでしょうか? また、VB本体だけでなく、Office2003のAccessデータベース(mdb)に接続するデータベースアプリなので、Office2003が最新OSで稼働するかも心配です。 XPサポート終了後、どうすれば良いか、迷っています。 良い知恵はありますか?

  • 乱数発生

    #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) {int y, m, l; srand( (unsigned)time( NULL ) ); y=rand() % 2500 + 1600; m=rand() % 12 + 1; l=rand() % 29 + 1; printf("西暦%d年%d月%d日",y,m,l); return(0); }今回は乱数発生でランダムにだされた西暦年月日をつくりましたが、y=rand() % 2500 + 1600; というのがありこれはyという乱数が2500以下1600以上という意味なのですがなぜかプログラムを実行しても3000いくつとか4000いくつなんてのもでてきます。m=rand() % 12 + 1;はちゃんと12以下1以上でできるのですがなぜですか?本当にわかりません。是非だれか教えてください。

専門家に質問してみよう