C# 当x!=1和y!=0?
如果C# 当x!=1和y!=0?,c#,ieee-754,C#,Ieee 754,如果x和y是IEEE 754浮点数(单精度或双精度),我们会有吗 x * y == y 其中x!=1和y!=0(且y也不等于+inf,-inf,或nan)。是;当您接近极端小因素和/或时,可能会发生这种情况 例如: float x = 1.0000001f; float y = 0.00000000000000000000000000000000000000001f; Console.WriteLine("x: " + x); Console.WriteLine("
x
和y
是IEEE 754浮点数(单精度或双精度),我们会有吗
x * y == y
其中
x!=1
和y!=0
(且y
也不等于+inf
,-inf
,或nan
)。是;当您接近极端小因素和/或时,可能会发生这种情况
例如:
float x = 1.0000001f;
float y = 0.00000000000000000000000000000000000000001f;
Console.WriteLine("x: " + x);
Console.WriteLine("y: " + y);
Console.WriteLine(x * y == y);
Console.WriteLine("x*y: " + (x * y));
屈服
x: 1.0000001
y: 1E-41
True
x*y: 1E-41
()
所有数字都定义得很好,但乘法不能以这种精度进行
有趣的事实:在.NET Framework 4.7.2中运行相同的程序会产生以下结果:
x: 1
y: 9.999666E-42
False
x*y: 9.999666E-42
()
因此,对于非常小的数字,实现的行为会有所不同