为什么 c# 的 float.MaxValue 精度比它允许的要高?
Why is c#'s precision for float.MaxValue more than it lets on?
C#代码:
double value = float.MaxValue;
Console.WriteLine(value / 2);
给出不同的值(C# 给出 1.70141173319264E+38 而没有浮点数的 C# 给出 1.701411735e+38)我 .
当我使用c#代码时:
double value = 3.40282347E+38;
Console.WriteLine(value / 2);
我和花车一样。 MSDN有错吗?
Dot Net Fiddle
float.MaxValue 是 3.40282347E+38.
Float MaxValue
摆弄我发现
Console.WriteLine(((3.40282347E+38 / 2) == (float.MaxValue / 2)).ToString());
打印 False
而 Console.WriteLine(((3.40282347E+38f / 2) == (float.MaxValue / 2)).ToString());
打印 True
。这是因为语言是这样做的:
By default, a real numeric literal on the right side of the assignment operator is treated as double.
您的数字是 double
,您正在将它与 float
进行比较,因此默认情况下精度不同。您必须通过在其末尾添加 f
来强制该数字成为 float
。
C#代码:
double value = float.MaxValue;
Console.WriteLine(value / 2);
给出不同的值(C# 给出 1.70141173319264E+38 而没有浮点数的 C# 给出 1.701411735e+38)我 .
当我使用c#代码时:
double value = 3.40282347E+38;
Console.WriteLine(value / 2);
我和花车一样。 MSDN有错吗?
Dot Net Fiddle
float.MaxValue 是 3.40282347E+38.
Float MaxValue
摆弄我发现
Console.WriteLine(((3.40282347E+38 / 2) == (float.MaxValue / 2)).ToString());
打印 False
而 Console.WriteLine(((3.40282347E+38f / 2) == (float.MaxValue / 2)).ToString());
打印 True
。这是因为语言是这样做的:
By default, a real numeric literal on the right side of the assignment operator is treated as double.
您的数字是 double
,您正在将它与 float
进行比较,因此默认情况下精度不同。您必须通过在其末尾添加 f
来强制该数字成为 float
。