为什么math.cs中的常量双PI分配了20个字符?

时间:2018-03-20 13:59:15

标签: c# pi

为什么在 math.cs 中将数字Pi分配给double类型?
常量PI 3.14159265358979323846在该点后包含20个字符 类型double只能输出其中的14个。为什么这样做?

// ==++==
// 
//   Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// ==--==
/*============================================================
**
** Class:  Math
**
**
** Purpose: Some floating-point math operations
**
** 
===========================================================*/
namespace System {

    //This class contains only static members and doesn't require serialization.
    using System;
    using System.Runtime;
    using System.Runtime.CompilerServices;
    using System.Runtime.ConstrainedExecution;
    using System.Runtime.Versioning;
    using System.Diagnostics.Contracts;

    public static class Math {

      private static double doubleRoundLimit = 1e16d;
      private const int maxRoundingDigits = 15;

      // This table is required for the Round function which can specify the number of digits to round to
      private static double[] roundPower10Double = new double[] { 
          1E0, 1E1, 1E2, 1E3, 1E4, 1E5, 1E6, 1E7, 1E8,
          1E9, 1E10, 1E11, 1E12, 1E13, 1E14, 1E15               };          

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

1 个答案:

答案 0 :(得分:1)

  

为什么在math.cs中,Pi被分配给double类型?

从根本上说,常量必须存储在某种数据类型中。

double是最高精度数据类型之一(of the standard C# data types)。唯一的另一个竞争者是十进制,并且因为PI的“精确”值通常不相关(更不用说 - 不能在非无限空间中表示为数字),double更合适。

  

常数PI 3.14159265358979323846在该点后包含20个字符。   类型double只能输出其中的14个。为什么这样做?

拥有太多数字而不是数字太少会更安全。也许在您的系统上只移位和/或存储了14位数字,但现在或将来的其他系统可能会重新定义double,以便更加精确。编写的代码允许将来具有一定程度的向后兼容性。

正如@RenéVogt所指出的,Math.PI.ToString("G20")返回了16位数字,例如。