我可以依靠吗
sqrt((float)a)*sqrt((float)a)==a
或者
(int)sqrt((float)a)*(int)sqrt((float)a)==a
检查一个数字是否是一个完美的正方形?为什么或者为什么不?
int a
是要判断的数字。我正在使用 Visual Studio 2005。
编辑:感谢所有这些快速的答案。我看到我不能依赖浮点类型比较。(如果我如上所述写,最后一个a
会被强制转换为隐式浮动吗?)如果我这样做
(int)sqrt((float)a)*(int)sqrt((float)a) - a < e
我应该把这个e
值取多少?
Edit2:嘿,我们为什么不把比较部分放在一边,决定是否(int)
有必要?如我所见,有了它,正方形的差异可能很大。但没有它,对于非正方形来说,差异可能很小。也许两者都不会。:-(