考えられない現象

解決


komin  2006-11-13 23:22:47  No: 23895

以下のようなコードを書きました。
  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 23:46:55  No: 23896

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


komin  2006-11-13 23:57:02  No: 23897

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


komin  2006-11-14 01:13:56  No: 23898

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加