Константа Math.Pi неверна - PullRequest
       1

Константа Math.Pi неверна

0 голосов
/ 18 сентября 2010

Мне хорошо известно, что у 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, но я уверен, что другие делают, и их ждет сюрприз, когда Пи неточен. То же самое относится и к E.

Редактировать: Это настроено на отражение констант в Visual Studio. См. дополнительный вопрос

Ответы [ 4 ]

15 голосов
/ 18 сентября 2010

Копирование и вставка из Math.cs в справочный источник .NET 4.0:

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

Понятия не имею, на что вы смотрите.

Это был обратный инжиниринг из дополнительного вопроса, в котором вы просматривали автоматически сгенерированный текст, который был создан из метаданных сборки при использовании элемента контекстного меню «Перейти к определению». Да, код, который генерирует этот текст, использует форматирование% f по умолчанию для открытых двойных константных значений. Кстати, в *. 1006 *, а не есть много открытых констант, которые удваиваются в .NET Framework. Вы можете оставить отзыв на сайте connect.microsoft.com

4 голосов
/ 18 сентября 2010

Быстрый тест показывает, что Console.WriteLine(Math.PI) выводит 3.14159265358979, так как это может быть правдой?Вы говорите, ToString() добавляет дополнительные цифры по волшебству?

3 голосов
/ 15 марта 2011

Проблема заключается в том, что все константы метаданных печатаются с использованием поведения printf () по умолчанию, которое заключается в использовании% f, который в итоге обрезает то, что вы видите, когда вы нажимаете F12 в VS на константе.См. Этот вопрос Усечены ли двойные константы для отображения в VS?

1 голос
/ 18 сентября 2010

Вы можете использовать Pi = Math.acos(-1).

Если серьезно, не занимайтесь математикой в ​​.NET, если вы не знаете, что делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...