みなさん、いつもお世話になります
複雑な計算処理の中で、単純な処理エラーで困っています
var a,b:double; として(実際にはrecordで宣言、配列で使用しています)
if a<b then の部分で 同じ整数値の時(a=-19 b=-19)
true を返す場合があります。
考えられる原因はあるでしょうか?
宜しくお願いします。
整数値は-19として、小数部の値は調べましたか?
double型などの浮動小数は、誤差を考えないといけません。
単純に整数部分のみ比べたいのなら、
if Int(a) < Int(b) then
とすればうまくいきます。
切り捨てられては困る場合は、誤差を消化するような計算を加えてやればうまくいくはずです。
にしの さま
いつも有難うございます
結果の異常を判断するため
Trueを返した時にログを出しています
s1:='a=' + floattostr(a);
s2:='b=' + floattostr(b);
その値を見た結果が-19と表示されています。
通常floattostrなら小数桁を表示するはずだと思うので
整数と表現してしまいました。
floattostrの表示で丸められた以下の桁数の誤差なのでしょうか?
floattostrで表示できる桁数分の最小値を
加算することで解決しました
有難うございました
ツイート | ![]() |