次のようなコードがあるとします。
float a, b = ...; // both positive
int s1 = ceil(sqrt(a/b));
int s2 = ceil(sqrt(a/b)) + 0.1;
それは可能ですs1 != s2
か?私の関心事は、a/b
が完全な正方形になるときです。たとえば、おそらくa=100.0
とb=4.0
の出力は であるceil
はずです5.00000
が、代わりに である場合は4.99999
どうでしょうか?
同様の質問: と100.0/4.0
評価されてから切り上げられる可能性は5.00001
ありますか?ceil
6.00000
私はこれを整数演算で行うことを好みsqrt
ますが、計画はちょっと失敗します。
編集:これをより適切に実装する方法に関する提案もいただければ幸いです! a
とのb
値は整数値なので、実際のコードは次のようになります。ceil(sqrt(float(a)/b))
編集: levis501の回答に基づいて、私はこれを行うと思います:
float a, b = ...; // both positive
int s = sqrt(a/b);
while (s*s*b < a) ++s;
皆さん、ありがとうございました!