views:

87

answers:

4

The constant Math.Pi is, according to reflector and MSDN, equal to 3.14159265358979323846. When looking at the Math class in Visual Studio 2010, the value is displayed as 3.14159. Whom can I blame for truncating precious constants?

+1  A: 

Sorry to repeat myself, but how do you get that number? If I hover over the constant or print it in the Immediate or Watch window in VS2010, I get 3.1415926535897931, which is also the value I get when looking at mscorlib in Reflector.

While it is less precision than MSDN claims, it is still far better than the number you're talking about. VS has to pick a formatting for printing floating point numbers. With the results I see I find the default quite acceptable.

Brian Rasmussen
+1  A: 

Maybe you have a plugin for VS 2010 that is changing the output of the number. Or maybe you're displaying the number in a display context that has to truncate the number to fit. Where exactly in Visual Studio are you viewing this number?

Jacob
+5  A: 

I don't know why the OP isn't posting this, as it would clear things up so incredibly much, but you can reproduce as follows:

  • Open the IDE
  • Enter Math.PI into a .cs file.
  • Right-click on Math.PI and click on 'Go To Definition'

This opens up the Metadata file for Math, which contains the following:

    //
    // Summary:
    //     Represents the ratio of the circumference of a circle to its diameter, specified
    //     by the constant, π.
    public const double PI = 3.14159;
mpeterson
Apparently Resharper provides better metadata view than VS, cause it gives the same value as Reflector. However, if I disable Resharper I get the result you describe. Odd.
Brian Rasmussen
Yup, has to be it. This text is auto-generated from the metadata. And clearly doesn't bother converting public constants of type double to a string with all 15 significant digits. It is the default formatting behavior of the printf() function in C/C++ with the %f format type specifier. It is very likely that this code was written in C++ since the metadata enumeration interface is COM based.
Hans Passant
Thanks Hans, That is quite interesting!
mpeterson
+1  A: 

You can blame the VS metadata view, which is what you get when you press F12 on something you don't have the source to.

At least I presume that's what you're doing, because it's the only place I can find the truncated constant you're talking about.

Why does it do it / where does it get that value from? Who knows...

Marc