Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

FAQs

Boost , Math Toolkit 2.5.0 , Chapter 4. Mathematical Constants

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext
Why are these Constants Chosen?

Конечно, невозможно угодить всем с таким списком.

Некоторые из критериев, которые мы использовали:

  • Используется в Boost. Математика.
  • Обычно используется.
  • Дорого для вычислений.
  • Запрошенные пользователями.
  • Используется в науке и математике.
  • Нет целочисленных значений (потому что так дешево строить).
    (Вы можете легко определить свой собственный, если это удобно, например:<FPT one=static_cast<FPT>(42);>.
How are constants named?
  • Не макросы, так что никакого верхнего регистра.
  • Все нижние регистры (по стандартным названиям C++).
  • Нет Камелкейза.
  • Подчеркните как _ делимитер между словами.
  • Числа мелькают в виде слов, а не десятичных цифр (кроме следующих за пухом).
  • Сокращенные конвенции:
    • корень для квадратного корня.
    • CBRT для кубического корня.
    • pow для функции pow с использованием десятичных цифр, таких как pow23 для n2/3.
    • div для разделенного оператором /.
    • минус для оператора - плюс для оператора +.
    • sqr для квадрата.
    • [].
    • Слова для греческого, как π, ζ и Γ.
    • Такие слова, как половина, третья, три четверти, шестая для дробей. (Digit(s) может запутаться).
    • log10 для log10
    • Лн для логе
How are the constants derived?

Все константы были рассчитаны с использованием высокоточного программного обеспечения, работающего с точностью до 300 бит, дающего около 100 десятичных цифр. (Точность может быть выбрана произвольно и ограничена только временем вычисления).

How Accurate are the constants?

Выбранная минимальная точность (100 десятичных цифр) превышает точность разумно предсказуемого оборудования с плавающей запятой (256 бит) и должна соответствовать большинству высокоточных вычислений.

How are the constants tested?
  1. Сравнение с использованием Boost. Тест BOOST_CHECK_CLOSE_FRACTION с использованием длинных двойных букв, по меньшей мере с 35 десятичными цифрами, достаточно точным для всех длинных двойных реализаций. Толерантность обычно бывает дважды<longdoubleepsilon>.
  2. Сравнение с расчетом с двойной точностью. Это часто требует немного более высокой терпимости, чем два эпсилона из-за вычислительного шума от округления и т. д., особенно когда триг и другие функции называются.
  3. Сравнение с независимыми опубликованными значениями, например, с использованиемOn-Line Encyclopedia of Integer Sequences (OEIS)снова с использованием по меньшей мере 35 десятичных цифр строк.
  4. Сравнение с независимо вычисленными значениями с использованием инструментов произвольной точности, таких какMathematica, снова с использованием по меньшей мере 35 десятичных цифр буквальных строк.
[Warning] Warning

Мы еще не смоглипроверить, чтовсеконстанты точны при полной произвольной точности, в настоящее время 100 десятичных цифр. Но некоторые ключевые значения, такие как<e>и<pi>, кажутся точными, и внутренние консистенции предполагают, что другие тоже точны.

Why is Portability important?

Код, написанный с использованием математических констант, легко переносим даже при использовании различных типов плавающих точек с различной точностью.

Ошибочно ожидать, что результаты вычислений будутидентичными, но вы можете достичьнаилучшей точности для используемого типа с плавающей точкой.

Это не имеет дополнительных затрат для пользователя, но уменьшает раздражающие и часто запутанные и очень трудно отслеживаемые эффекты, вызванные изначально ограниченной точностью вычислений с плавающей запятой.

Безобидным симптомом этого предела является ложная наименее значимая цифра; в худшем случае слегка неточные константы иногда вызывают дикое расхождение итерационных алгоритмов, потому что внутренние сравнения просто не удаются.

What is the Internal Format of the constants, and why?

См.руководствовыше для обычного использования, но этот часто задаваемый вопрос объясняет внутренние детали, используемые для констант.

Константы хранятся в виде 100 десятичных цифр. Однако некоторые компиляторы не принимают десятичные цифры строк до тех пор, пока это. Таким образом, константа разбивается на две части, причем первая содержит по меньшей мере 128-битную длинную двойную точность (35 десятичных цифр), а для согласованности должна быть в научном формате с подписанным экспонентом.

Вторая часть представляет собой значение константы, выраженное в виде строки, буквальной, точной по меньшей мере до 100 десятичных цифр (на практике это означает по меньшей мере 102 цифры). Опять же для согласованности используют научный формат с подписанным экспонентом.

Для типов с точностью, превышающей длинный двойник, если T является конструируемым<T>, то он конструируемым из<constchar*>, то он непосредственно построен из струны, в противном случае мы возвращаемся к lexical_cast, чтобы преобразовать в тип<T>. (Использование строки необходимо, потому что вы не можете использовать числовую константу, поскольку даже 43 может не иметь достаточного количества цифр).

Так, например, константа, подобная пи, внутренне определяется как

BOOST_DEFINE_MATH_CONSTANT(pi, 3.141592653589793238462643383279502884e+00, "3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651e+00");

В этом случае значение равно 109 десятичным цифрам, что гарантирует точность 100 десятичных цифр, а показатель равен нулю.

См.определение новых константдля вычисления новых констант.

Подобное макроопределение может быть вставлено в код пользователя там, где это удобно, или в<boost/math/constants.hpp>, если оно должно быть добавлено в Boost. Математическая библиотека.

What Floating-point Types could I use?

Помимо встроенных типов плавающих точек<float>,<double>,<long double>, существует несколько классов с произвольной точностью плавающих точек, но большинство из них не лицензированы для коммерческого использования.

Boost.Multiprecision by Christopher Kormanyos

Эта работа основана на более ранней работе под названием e-float: Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations, in ACM TOMS, {VOL 37, ISSUE 4, (февраль 2011)} (C) ACM, 2011.http://doi.acm.org/10.1145/1916461.1916469e_float, но в настоящее время он рефакторирован и доступен по лицензии Boost в песочнице Boost помноготочности, где он дорабатывается и готовится к рассмотрению.

Boost.cpp_float by John Maddock using Expression Templates

Большое число, которое является переработкойe_floatКристофера Корманиоса для использования шаблонов выражения для более быстрого исполнения.

NTL class quad_float

НТЛВиктора Шупа имеет фиксированные и произвольные высокоточные фиксированные и плавающие типы. Однако ни один из них не лицензирован для коммерческого использования.

#include <NTL/quad_float.h> // quad precision 106-bit, about 32 decimal digits.
using NTL::to_quad_float; // Less precise than arbitrary precision NTL::RR.

Класс NTL<quad_float>, дающий форму четырехкратной точности, 106-битный значимый и (но без расширенного диапазона экспонент). С совместимым процессором IEC559/IEEE 754, например семейством Intel X86, с 64-разрядным двойным и 53-разрядным значащим, используя значащие значениядвух64-разрядных двойников, если<std::numeric_limits<double>::digits10>16, то мы получаем примерно в два раза больше точности, поэтому<std::numeric_limits<quad_float>::digits10()>должно быть 32. (по умолчанию<std::numeric_limits<RR>::digits10()>должно быть около 40). (что согласуется с экспериментами). Мы выводим константы (включая некоторые шумные биты, приближение к<std::numeric_limits<RR>::max_digits10()>), добавляя 2 или 3 дополнительных десятичных цифры, поэтому используя<quad_float::SetOutputPrecision(32+ 3);>.

Apple Mac/Darwin использует аналогичныйдвойной106-битный для своего встроенного<longdouble>типа.

[Note] Note

Точность всех типов с плавающей точкой<doubledouble>довольно странная, и приведенные значения являются лишь приблизительными.

Новые проекты должны использоватьBoost.Multiprecision.

NTL class RR

Произвольная прецизионная плавающая точка с классом NTL RR по умолчанию составляет 150 бит (около 50 десятичных цифр), используемых здесь с 300 битами для вывода 100 десятичных цифр, что достаточно для многих практических не теоретико-числовых приложений C++.

NTL Библиотека теории чиселне лицензирована для коммерческого использования.

Этот класс используется в Boost. Математика и является вариантом при использовании больших числовых проектов для расчета новых математических констант.

Новые проекты должны использоватьBoost.Multiprecision.

GMP and MPFR

GMPиMPFRтакже использовались для вычисления констант, но лицензированы по лицензииLesser GPLине лицензированы для коммерческого использования.

What happened to a previous collection of constants proposed for Boost?

В ходе обзора был сделан вывод о том, что способ представления констант не отвечает потребностям многих народов. Ни один из предложенных методов не удовлетворял существенному требованию многих пользователей разрешить писать просто<pi>, а не<pi()>. Многие научные и инженерные уравнения трудно читать, потому что скобки вызова функции можно спутать со многими другими часто необходимыми скобками. Все предложенные тогда методы обхода скобок не отвечали всем потребностям, зачастую по причине сложности и неприменимости к различным реалистичным сценариям.

Таким образом, простой метод пространства имен, предложенный сам по себе, но отвергнутый в первом обзоре, был добавлен, чтобы позволить пользователям иметь удобный доступ к плавающим, двойным и длинным двойным значениям, но в сочетании с структурой шаблона и функциями, позволяющими одновременно использовать с другими не встроенными типами плавающих точек.

Why do the constants (internally) have a struct rather than a simple function?

Функциональный механизм был предусмотрен в предыдущих версиях Boost. Математика.

Новый механизм позволяет частично специализироваться. Посмотреть Custom Специализация константы выше. Он также должен разрешать использование с другими пакетами, такими какttmath Bignum C++.

Where can I find other high precision constants?
  1. Константы с очень высокой точностью и хорошей точностью (>40 десятичных цифр) из веб-коллекции Саймона Плуффаhttp://pi.lacim.uqam.ca/eng/.
  2. Энциклопедия целочисленных последовательностей (OEIS)
  3. Проверки с использованием печатного текста, оптически отсканированные значения и преобразованные из: D.E. Knuth, Art of Computer Programming, Appendix A, Table 1, Vol 1, ISBN 0 201 89683 4 (1997)
  4. M. Abrahamovitz & I. E. Stegun, National Bureau of Standards, Handbook of Mathematical Functions, справочник по формулам, ныне вытесненным
  5. Frank W. Olver, Daniel W. Lozier, Ronald F. Boisvert, Charles W. Clark, NIST Handbook of Mathemetical Functions, Cambridge University Press, ISBN 978-0-521-14063-8, 2010.
  6. Джон Ф. Харт, Компьютерные приближения, Крейгер (1978) ISBN 0 88275 642 7.
  7. Некоторые значения из Cephes Mathematical Library, Stephen L. Moshier и CALC100 100 decimal digit Complex Variable Calculator Program, утилиты DOS.
  8. Xavier Gourdon, Pascal Sebah, 50 десятичных цифр константы вчисло, константы и вычисления.
Where are Physical Constants?

Не здесь, в этом бусте. Сбор математики, потому что физические константы:

  • Это измерения, а не истинные константы.
  • На самом деле они не являются постоянными и постоянно меняются по мере совершенствования технологии.
  • Имейте внутреннюю неопределенность.
  • Математические константы хранятся и представлены с различной точностью, но никогда не должны быть неточными.

В Boost могут быть доступны некоторые физические константы. Подразделения.


PrevUpHomeNext

Статья FAQs раздела Math Toolkit 2.5.0 Chapter 4. Mathematical Constants может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 4. Mathematical Constants ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:33:16/0.0096688270568848/1