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
()

因此,对于非常小的数字,实现的行为会有所不同