Math.Pi常量是错误的

时间:2010-09-18 17:25:08

标签: .net math

我很清楚Double只有很多精度,但如果可能的话,我们仍然应该尝试获得高精度。所以我当然不希望在官方的.NET 4系统库中看到这一点。

// Summary:
//     Represents the ratio of the circumference of a circle to its diameter,
//     specified by the constant, π.
public const double PI = 3.14159;

为什么只有6位数?使用准确的值会很容易且免费。我不是在.NET中做科学工作,但我确信其他人都做了,而且当Pi不准确时,他们会感到惊讶。同样适用于E.

编辑:这是为了反映Visual Studio中的常量。见followup question

4 个答案:

答案 0 :(得分:15)

从.NET 4.0参考源中的Math.cs复制并粘贴:

  public const double PI = 3.14159265358979323846;
  public const double E  = 2.7182818284590452354;

不知道你在看什么。

从后续问题进行逆向工程,您查看了使用“转到定义”上下文菜单项时从程序集元数据创建的自动生成的文本。是的,生成此文本的代码似乎使用公共双常量值的默认%f格式。非常罕见的btw,很多公共常量在.NET框架中是双重的。您可以在connect.microsoft.com上提交反馈报告

答案 1 :(得分:4)

快速测试显示Console.WriteLine(Math.PI)输出3.14159265358979所以这怎么可能是真的?你是说ToString()通过魔法添加额外数字吗?

答案 2 :(得分:3)

问题是所有元数据常量都是使用默认的printf()行为打印的,这种行为是使用%f最终会截断你在常量上按VS中的F12时所看到的内容。请参阅此问题Are Double constants truncated for display in VS?

答案 3 :(得分:1)

您可以使用Pi = Math.acos(-1)

更严重的是,除非你真的知道自己在做什么,否则不要在.NET中进行数学运算。