以下のようなコードを書きました。
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)を書き加えておくと正常な値を返してくるのです。どう考えても信じられない動きなのですが、どうしたものでしょう?
最適化の影響では。
px1 が後で使用されないなら、高速化のために処理が飛ばされてしまうのだと思います。
えーとねさん、毎度お世話になります。
ご指摘の通り、本来のpx1を含んだ演算式を後ろに書き足したら正常になりました。うー、3時間も考え込んでしまった…
解決にするのを忘れました。
ツイート | ![]() |