浮点运算大于或等于

Floating point arithemtics bigger or equal

我想知道,C# 中的浮点数是否会给出关于大于或等于的错误结果。

static bool foo()
{
    Random r = new Random();
    int i = r.Next(int.MinValue, int.MaxValue), 
        j = r.Next(int.MinValue, int.MaxValue), 
        k = r.Next(int.MinValue, int.MaxValue), 
        l = r.Next(int.MinValue, int.MaxValue);

    BigInteger b1 = new BigInteger(i) * j, b2 = new BigInteger(k) * l;
    double d1 = (double)i * j, d2 = (double)k * l;
    return (b1 >= b2 && d1 >= d2) || (b1 <= b2 && d1 <= d2);
}

更具体地说,foo 会 return 错误吗?

我想重新表述一下你的问题。
假设 ab 为两个整数 a >= bdaa 的双重表示,dbb[ 的双重表示=35=].

有没有可能 da < db?

答案是否定的
如果 da < db 那么 dba 的双重表示,误差低于 da 由于 IEEE-754 标准,这是不可能的。

所以你的问题的答案也是并且foo总是returns正确。