1

2 つの double 値 (a と b) の場合

  1. どちらもマイナスではない
  2. 両方とも、NaNまたはいずれでもない(POSITIVE|NEGATIVE)_INFINITY
  3. a >= b

それは常に本当ですか

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

?

IEEE 754 のものごとに false の可能性はありますか?

double 値ではなく long 値として、2 つの正 (ゼロ以外) の整数のレート値を格納するつもりです。

@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 に答える