• ベストアンサー

この値は代入できないの?

double v0r[64]; for(i=0;i<64;i++)  v0r[i]=rand()/RAND_MAX; このようなプログラムを書いたのですが、全く値が代入されません。 どうしてなのでしょうか・・・。 stdio.NETで書いているのですが デバックありで実行で、値代入されているか確認した所 全部 v0r[0] 0.000000000000 v0r[1] 0.000000000000 v0r[2] 0.000000000000 .... と出て、 代入された時にでる赤い字になりません。 なんで0~1までの乱数が格納されないのでしょうか?

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

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

doubleにキャストしてください。 v0r[i]=rand()/RAND_MAX; これだと ( int / int ) の計算が行われますがこの結果もintになってしまいます。 明示的にキャストを書くとv0r[i]=(double)(rand()/RAND_MAX); という計算を行っており 例えば30000/32767の結果がintでは0になり、さらにこれが暗黙的にdoubleに キャストされ0.0000000となっているのです。 v0r[i]=(double)rand()/(double)RAND_MAX; すれば問題ありません。 またCの特性として暗黙に精度の高い方にキャストされるので v0r[i]=(double)rand()/RAND_MAX; としても意図している結果が得られます。

関連するQ&A

専門家に質問してみよう