考えられない現象

解決


komin  2006-11-13 14:22:47  No: 23895  IP: 192.*.*.*

以下のようなコードを書きました。
  tm  := 45;
  z   := DegToRad(Startangle);  //Startangle := 90
  px1 := (1-cos(z))  * tan(DegToRad(90-tm)) *  r;

  計算結果がおかしいので、次の行にブレークポイントを設けてpx1の値を見ると0になっています。コードを見るかぎりtan(DegToRad(90 - tm)の値は1になるはず、cos(z)は0なので、結果的にpx1の値はrと同じ値になるはずです。
  ところが、px1 := の次の行に何らかの代入式、たとえばEdit5.Text := FloatToStr(px1)を書き加えておくと正常な値を返してくるのです。どう考えても信じられない動きなのですが、どうしたものでしょう?

編集 削除
えーとね  2006-11-13 14:46:55  No: 23896  IP: 192.*.*.*

最適化の影響では。
px1 が後で使用されないなら、高速化のために処理が飛ばされてしまうのだと思います。

編集 削除
komin  2006-11-13 14:57:02  No: 23897  IP: 192.*.*.*

えーとねさん、毎度お世話になります。
ご指摘の通り、本来のpx1を含んだ演算式を後ろに書き足したら正常になりました。うー、3時間も考え込んでしまった…

編集 削除
komin  2006-11-13 16:13:56  No: 23898  IP: 192.*.*.*

解決にするのを忘れました。

編集 削除