2016-04-18 8 views
-1

C# -Code:Warum ist C# 's Präzision für float.MaxValue mehr als es lässt?

double value = float.MaxValue; 
Console.WriteLine(value/2); 

geben unterschiedliche Werte (C# gibt 1.70141173319264E + 38 und C#, ohne Schwimmer gibt mir 1.701411735e + 38) me.

Wenn ich die C# -Code verwenden:

double value = 3.40282347E+38; 
Console.WriteLine(value/2); 

bekomme ich die gleiche wie Schwimmer. Ist MSDN falsch?

Dot Net Fiddle
float.MaxValue ist 3.40282347E + 38.
Float MaxValue

+6

* JavaScript/C# ohne Floats gibt mir * ... was? – Pointy

+3

IMO entfernen Sie einfach 'javascript' und fragen Sie, warum' double value = float.MaxValue/2' sich von 'double value = 3.40282347E + 38/2 'unterscheidet. – Quantic

+0

Geändert, danke. – trinalbadger587

Antwort

2

um I Hantieren festgestellt, dass Console.WriteLine(((3.40282347E+38/2) == (float.MaxValue/2)).ToString()); druckt False während Console.WriteLine(((3.40282347E+38f/2) == (float.MaxValue/2)).ToString()); druckt True. Es ist, weil die Sprache das tut:

By default, a real numeric literal on the right side of the assignment operator is treated as double.

Ihre Nummer ist ein double und Sie vergleichen es mit einem float, so dass die Genauigkeit standardmäßig unterschiedlich ist. Sie müssen die Nummer zu einem float zwingen, indem Sie f am Ende davon hinzufügen.

+0

'float.MaxValue - 3.40282347E + 38F' = 0 – stuartd

+0

Ist die Extra-Genauigkeit doppelt, falsche Präzision (oder float.MaxValue hat mehr Präzision als Floats? – trinalbadger587

+0

' float' ist ein Alias ​​für 'Single'.' Double 'ist' Double's Alias. Es ist buchstäblich doppelt so viel Präzision. –