浮点运算大于或等于
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 错误吗?
我想重新表述一下你的问题。
假设 a 和 b 为两个整数 a >= b。 da 是 a 的双重表示,db 是 b[ 的双重表示=35=].
有没有可能 da < db?
答案是否定的
如果 da < db 那么 db 是 a 的双重表示,误差低于 da 由于 IEEE-754 标准,这是不可能的。
所以你的问题的答案也是否并且foo
总是returns正确。
我想知道,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 错误吗?
我想重新表述一下你的问题。
假设 a 和 b 为两个整数 a >= b。 da 是 a 的双重表示,db 是 b[ 的双重表示=35=].
有没有可能 da < db?
答案是否定的
如果 da < db 那么 db 是 a 的双重表示,误差低于 da 由于 IEEE-754 标准,这是不可能的。
所以你的问题的答案也是否并且foo
总是returns正确。