假设我有一些代码,例如:
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
and 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;
谢谢你们!