如何比较整数n的平方根sqrt(n)与有理数p/q?
如何比较整数n的平方根与有理数p/q?
咱们来聊聊怎么比较整数n的平方根sqrt(n)和有理数p/q(p、q均为整数),这里有两种常用思路,各有优劣:
方案1:直接调用平方根函数做浮点数比较
直接用表达式sqrt(n) <= (double)p / q来判断大小关系就行。这种方法逻辑特别直观,代码写起来也简单,但问题在于调用sqrt()函数的开销比单纯的乘除法要高,性能上会稍逊一筹。方案2:通过平方转换优化运算
因为sqrt(n)和p/q都是非负数,咱们可以把不等式两边同时平方,转换成浮点数运算的表达式:(double)n * q * q <= p * p。这种方法避开了sqrt()函数,速度比方案1更快,但也有短板:当p/q和sqrt(n)非常接近时,浮点数的精度限制可能会让比较结果出错,而且整数转浮点数的操作,相比纯整数运算还是会慢那么一点点。
内容的提问来源于stack exchange,提问作者R2B2




