-2

float 操作で奇妙な結果が得られました。

float a = myView.frame.size.height / 2.0;
float b = (myFrame.size.height / 2.0);
float c = a-b;

デバッグ モード: a = 201; b = 201; c = -3.05176e-05 ???

どうして??

4

1 に答える 1

1

問題は、実際に myView.frame.size.height と myFrame.size.height を計算する方法にあります。

両方とも正確に 402 の場合、c はゼロになります。通常の浮動小数点数の場合、2 による除算は正確です。そのうちの少なくとも 1 つは 402 とわずかに異なります。違いの原因を見つける必要がある場合は、さらに数字を出力して正確に 402 でないものを確認し、その変数がどのように計算されたかを調べる必要があります。

ただし、float を使用すると、一般に有効桁数 7 桁付近で丸め誤差が発生することが予想されるため、絶対値が約 1e-4 未満の 200 付近の値の差をゼロとして扱うという別のオプションがあります。

于 2013-09-05T12:11:59.890 に答える