代码之家  ›  专栏  ›  技术社区  ›  flow2k

可比API文档中的Java`sgn`函数

  •  0
  • flow2k  · 技术社区  · 6 年前

    我读过

    实现者必须确保sgn(x.compareTo(y))== -所有x和y的sgn(y.compareTo(x))。

    https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html . 在我看来 sgn 不是Java函数-我说得对吗?如果 新加坡元 表示符号,不能只说 x.compareTo(y) == -y.compareTo(x) ? 我知道这个问题可能有点挑剔,但我想说清楚。

    1 回复  |  直到 6 年前
        1
  •  3
  •   rgettman    6 年前

    再往下一点 same Javadocs for compareTo ,描述了“sgn”功能。

    在前面的描述中,符号 sgn(表达式) 指定数学符号函数,该函数定义为返回 -1 , 0 ,或 1 根据 表达 分别为负、零或正。

    没有 sgn 方法,我可以在Java中看到。但是,有一个 Math.signum 方法返回的符号 double float .

    作家们可以说

    Math.signum(x.compareTo(y)) == Math.signum(-y.compareTo(x))
    

    但指的是 well-known mathematical function ("sgn") 已经足够了。

    具体说明 x.compareTo(y) == -y.compareTo(x) 是不必要的限制。合同 比较函数 只有州

    负整数、零或正整数,因为此对象小于、等于或大于

    对于小于,它返回-1、-3、-5或-1000000并不重要。完全可以 a.compareTo(b) 返回 -1个 b.compareTo(a) 返回 3 . 切换变量时的结果不必是数学上的相反值。