1

如果两个双精度值(a 和 b)

  1. 两者都不是负面的
  2. 两者都不是 anNaN也不是 any (POSITIVE|NEGATIVE)_INFINITY
  3. a >= b

总是真的吗

  1. Double.doubleToLongBits(a) >= Double.doubleToLongBits(b)

?

每个 IEEE 754 的东西是否有任何可能的错误?

我打算将两个正(非零)整数的速率值存储为 long 值而不是 double 值。

@Entity
public class ExchangeRate {

    @PrePersist
    protected void prePersist() {
        targetAmountPerSourceAmount = Double.doubleToLongBits(
            (double) targetAmount / (double) sourceAmount);
    }

    @Basic
    private long targetAmountPerSourceAmount;

    @Min(1)
    @Max(Short.MAX_VALUE)
    private short targetAmount;

    @Min(1)
    @Max(Short.MAX_VALUE)
    private short sourceAmount;
}
4

1 回答 1

2

好吧,零会给您带来问题,因为 +0.0 == -0.0 但它们具有不同的表示形式。

    double a = -0.0;
    double b = +0.0;
    System.out.println("a == b? " + (a == b)); // true
    long aLong = Double.doubleToLongBits(a);
    long bLong = Double.doubleToLongBits(b);
    System.out.println("a' >= b'? " + (aLong >= bLong)); // false
于 2012-12-13T07:26:28.950 回答