if a<b then の結果を正しく得るには

解決


Taku  2002-06-27 22:11:47  No: 1038

みなさん、いつもお世話になります
複雑な計算処理の中で、単純な処理エラーで困っています
var a,b:double; として(実際にはrecordで宣言、配列で使用しています)
if a<b then の部分で  同じ整数値の時(a=-19 b=-19)
true を返す場合があります。
考えられる原因はあるでしょうか?
宜しくお願いします。


にしの  2002-06-27 22:48:15  No: 1039

整数値は-19として、小数部の値は調べましたか?
double型などの浮動小数は、誤差を考えないといけません。
単純に整数部分のみ比べたいのなら、
if Int(a) < Int(b) then
とすればうまくいきます。
切り捨てられては困る場合は、誤差を消化するような計算を加えてやればうまくいくはずです。


Taku  2002-06-27 23:30:46  No: 1040

にしの  さま
いつも有難うございます

結果の異常を判断するため
Trueを返した時にログを出しています
s1:='a=' + floattostr(a);
s2:='b=' + floattostr(b);
その値を見た結果が-19と表示されています。
通常floattostrなら小数桁を表示するはずだと思うので
整数と表現してしまいました。
floattostrの表示で丸められた以下の桁数の誤差なのでしょうか?


Taku  2002-06-28 00:10:06  No: 1041

floattostrで表示できる桁数分の最小値を
加算することで解決しました
有難うございました


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








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