【问题标题】:Could someone explain how this code returns true if an integral number is square?如果整数是平方数,有人可以解释这段代码如何返回 true 吗?
【发布时间】:2023-01-18 01:29:39
【问题描述】:
 public static boolean isSquare(int n) {      
        return Math.sqrt(n) % 1 == 0;

我只是在寻找一个解释。

【问题讨论】:

标签: java


【解决方案1】:

Math.sqrt(n)

唯一存在的sqrt 方法采用double 并返回doubledouble 是一个 64 位 IEEE754 风格的浮点数。 sqrt 是“平方根”的缩写。例如,16 的平方根是 4。Math.sqrt(16) 返回 4.0

因此,java 默默地将 n 转换为 double 值(这总是完美的;double 值不能代表每个数字,但它们可以代表每个 int)。然后它执行平方根运算并将结果四舍五入为最接近的可以用 double 完美表示的数字。如果输入是平方数,这将是完美的(因为所有整数都可以完美地表示为双精度数)。如果输入不是正方形,则四舍五入到最接近的可表示双精度的结果极有可能是不是一个整数。

其中很多内容有点模糊,因为 IEEE 浮点数学非常复杂。 Read the wikipedia 了解更多信息。

然后在 that % 1 操作中使用此双精度值。这归结为:从数字中重复减去1.0,直到你不能再这样做;剩下什么?

换句话说,% 1 double 或多或少是“去掉整数位,只给我逗号后的内容”。更简单:如果 double 根本没有小数部分,someDouble % 1 == 0 为真,否则为假。

因此,这会检查:嘿,如果你取输入的平方根,你有小数部分还是最终结果是整数?如果它是一个整数,则输入是正方形,否则不是。

【讨论】:

    猜你喜欢
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多