掲示板ランキング  レギュラー(グァテマラ)  レギュラー(ブラジル)  レギュラー(ハワイコナ)


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.7384

小数のカウント
投稿者---999(2007/04/24 22:09:43)


rand関数でランダムに発生させた各小数が、それぞれ何回ずつ発生したかをカウントするプログラムを作りたいのですが方法が分かりません。
配列を使おうと思ったのですが小数のカウントのため詰まってしまいました。
どなたか方法を教えてください。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:小数のカウント 7385 bugs 2007/04/24 22:24:20
<子記事> Re:小数のカウント 7386 kolona 2007/04/24 22:32:37
<子記事> Re:小数のカウント 7390 円零 2007/04/25 18:41:30


No.7385

Re:小数のカウント
投稿者---bugs(2007/04/24 22:24:20)


>rand関数でランダムに発生させた各小数

どういった小数ですか?
値の範囲や、小数点以下の桁数など、決まっていることはありますか?

> それぞれ何回ずつ発生したかをカウントする

もし、何も決まりがないとすると、全部1回ずつになってしまうか、
ほとんどそれに近い結果になるような気がしますけれど。

というのは、同じような値の乱数が発生しても、あくまで「同じような」ですから、
「同じ」じゃないんですよね。
「同じような」値の乱数は、別々にカウントするしかないわけです。
つまり、「同じ」値の乱数が発生するケースはあまり起こらない
ような気がします。


この投稿にコメントする

削除パスワード

No.7386

Re:小数のカウント
投稿者---kolona(2007/04/24 22:32:37)


>rand関数でランダムに発生させた各小数が、それぞれ何回ずつ発生したかをカウントするプログラムを作りたいのですが方法が分かりません。
>配列を使おうと思ったのですが小数のカウントのため詰まってしまいました。
>どなたか方法を教えてください。

小数の幅によります。0〜1まで、0.01刻みなら101個の配列でそれぞれの出現回数を別々にカウントできます。ですが、0〜10000000(一千万)を0.01刻みでカウントすると、その時点で1000000001(十億一)の配列が必要です。int型が32bitなら実に40億、約4GBの記憶領域を必要とします。
連続した数字の度数分布は一筋縄ではいきません。


この投稿にコメントする

削除パスワード

No.7388

Re:小数のカウント
投稿者---999(2007/04/25 09:37:34)


ありがとうございます。
小数第3位ぐらいで切り捨ててカウントしてみます。


この投稿にコメントする

削除パスワード

No.7389

Re:小数のカウント
投稿者---επιστημη(2007/04/25 10:47:37)
http://blogs.wankuma.com/episteme/


>小数第3位ぐらいで切り捨ててカウントしてみます。

そいじゃ1000倍して count[1000]のインデックスにするだけね。



この投稿にコメントする

削除パスワード

No.7390

Re:小数のカウント
投稿者---円零(2007/04/25 18:41:30)


あえてツッコミます。
rand関数に小数を発生させることはできません。
randで得たランダムな整数を使って小数を作ることはできるかもしれませんが…

小数第3位ぐらいで切り捨てとか怪しい条件が後からついたようですが、
最初の書き込みの話を素直に反映すればこうなるかと。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

typedef struct frq{  //度数を保持。二分木使用。
    double d;
    int count;
    struct frq *child[2];  //0:小 1:大
}Frq;
Frq blank = {0, 1, {NULL, NULL}};

Frq *newfrq(double v){
    Frq *f = malloc(sizeof(Frq));
    if(!f) exit(1);
    *f = blank;
    f->d = v;
    return f;
}

void additem(Frq *parent, double v){
    Frq **newitem;
    if(v == parent->d)
        parent->count++;
    else if(*(newitem = &parent->child[v > parent->d]))
        additem(*newitem, v);
    else
        *newitem = newfrq(v);
}

void printascendingorder(Frq *f){
    if(!f) return;
    printascendingorder(f->child[0]);
    printf("%e: %d回\n", f->d, f->count);
    printascendingorder(f->child[1]);
}

double randomdouble(void){
    int i, n;
    unsigned char byte[sizeof(double)];
    double rd;
    for(i = 0; i < sizeof(double); i++) byte[i] = (unsigned char)rand();
    memcpy(&rd, byte, sizeof(double));
    return rd;
}

int main(void){
    int i;
    Frq root = {randomdouble(), 1, {NULL, NULL}};
    srand((unsigned)time(NULL));
    for (i = 1; i < 20; i++) additem(&root, randomdouble());
    printascendingorder(&root);
    return 0;
}



この投稿にコメントする

削除パスワード

No.7391

Re:小数のカウント
投稿者---yoh2(2007/04/25 22:53:31)


>あえてツッコミます。
「あえて」と書いてあるので、すでに見当は付いているかとは思いますが、
恐らく乱数の発生方法の続きなんじゃないですかね。
つまり、[-10, 10]の乱数の分布を見たいのではないかと。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ