• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c言語 プログラム)

C言語の時間計測を調べるプログラム

このQ&Aのポイント
  • C言語の時間計測を行うためのプログラムを見つけました。プログラムの中にはfor文があり、変数xに対して計算が行われています。
  • 質問1: for文の中の x = (double)k/loop の意味は何ですか?
  • 質問2: *1.e6の値はいくらですか?

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

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

少し、丁寧に説明します。 変数の型については解っているものとします。 int k,loop=10000000;//_測定増幅ループ double x;//_対象関数の引数 kとloopはintで、xはdoubleで宣言しています。 for(k=0;k<loop;k++){ x=(double)k/loop; exp(x);//_時間測定対象の関数 たとえば、上の(double)がないと、 x=k/loop; となって、これは整数型(int)の計算(kもloopもint)になります。 ここではk<loopだから、整数型(int)の計算では、常にx=0です。 exp(x)で呼んでも、常にx=0で呼ぶことになって意味がありません。 そこで、一時的にkをdoubleにして計算させて0でない結果(小数点付の数値)を得ようというのが、 x=(double)k/loop です。xはdoubleなので、小数点付の数値がxに入ります。 一時的に型を変換することを型のキャストといいます。 一時的なので、この計算が終われば、元のint型に戻ります。 1.e6は、#1さんのとおりです。

0y4u
質問者

お礼

ありがとうございます!!

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

>x = (double)k/loop >が入っているのですがどのような意味なのでしょうか? k も loop も int (整数)型です。Cでは整数型の値同士の割り算は、整数の範囲で行うので、言い換えると、結果はあまりを切り捨てた値になります。ここでは、小数点以下まで商を求めたいので、k を double(実数)型に変換してから整数で割ってます。実数 割る 整数は普通の割り算になります。 x = (double)k/loop は不要なカッコを補うと、x = ( (double)k )/loop という意味です。これを x = (double) (k/loop) と書いては駄目で、一旦切り捨てた値を実数に直しても、失われた小数点以下は取り戻せません。 >また*1.e6の値はいくらなのでしょうか? 「1 掛ける (10 の 6 乗)」で、100万です。 1e-2 だと 「1 掛ける (10 の -2 乗)」で、0.01 になります。

0y4u
質問者

お礼

ありがとうございます

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

>for文のところに >x = (double)k/loop >が入っているのですがどのような意味なのでしょうか? >int k,loop=10000000;//_測定増幅ループ >double x;//_対象関数の引数 k / loop の結果を double型の x に代入するために double型にキャストしています。 >また*1.e6の値はいくらなのでしょうか? 1 × 10の6乗 つまり 1000000 です。

0y4u
質問者

お礼

ありがとうございます

関連するQ&A