【发布时间】:2010-11-26 18:47:53
【问题描述】:
我可以依靠吗
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)是否必要?如我所见,有了它,正方形的差异可能很大。但没有它,对于非正方形来说,差异可能很小。也许两者都不会。 :-(
【问题讨论】:
-
大概
a是int,但你能确认一下吗? -
大家都被否决是怎么回事?
-
phoenie,出于所有实际目的,小于 0.1 左右的任何值都应该起作用,因为您基本上是在比较大约等于整数的值 - 任何其他整数输入都会导致输出大约为整数差的广场。
-
e 将是 |f'(x)|-|(f(x)-f(x+h))/h| 的最小值作为 h->0
-
使用自然对数 - 更精确
标签: c++ math floating-point perfect-square