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

Why use a high-precision library rather than built-in floating-point types?

Boost , Math Toolkit 2.5.0 , Using Boost.Math with High-Precision Floating-Point Libraries

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

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

Некоторые причины, по которым вы хотите использовать более высокую точность:

  • Гораздо более точный результат (многие цифры) является просто требованием.
  • Диапазон вычисленного значения превышает диапазон типа: факториалы — пример учебника.
  • двойнойявляется (или может быть) слишком неточной.
  • [или может быть] слишком неточно.
  • Использование типа расширенной точности, реализованного в программном обеспечении какдвойнойДарвин, иногда непредсказуемо неточно.
  • Потеря точности или неточности, вызванная крайними аргументами или ошибкой отмены.
  • Требуется максимальная точность для выбранного типа плавающей точки.
  • В качестве эталонного значения, например, для определения неточности значения, вычисляемого со встроенным типом с плавающей точкой (возможно, даже с использованием какого-то быстрого «грязного» алгоритма). Точность многих функций и распределений в Boost. Математика была измерена таким образом из таблиц с очень высокой точностью (до 1000 десятичных знаков).

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

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

(Некоторые из наихудших и наиболее распространенных примеровошибки отмены или потери значимостиможно избежать, используядополнения: см.Почему дополнения?.

Если вам требуется значение, которое является столь же точным, как может быть представлено в типе с плавающей точкой, и, таким образом, является самым близким представляемым значением и имеет погрешность менее 1/2 aнаименее значимый битилиulp, может быть полезно использовать тип с более высокой точностью, например,cpp_dec_float_50, для генерации этого значения. Преобразование этого значения во встроенный тип с плавающей запятой ('плавающий',двойнойилидлинныйдвойной) не приведет к дальнейшей потере точности. Десятичная строка также будет «читаться» точно компилятором во встроенный тип с плавающей точкой до ближайшего репрезентабельного значения.

[Note] Note

В отличие от этого, чтение значения изstd:istreamво встроенный тип с плавающей точкойне гарантируется C++ Стандартдля получения ближайшего репрезентативного значения.

Уильям Кахан ввел терминДилемма Таблицыдля проблемы правильного округления функций. Использование гораздо более высокой точности (50 или 100 десятичных знаков) является практическим способом генерации (почти всегда) правильно округленных значений.


PrevUpHomeNext

Статья Why use a high-precision library rather than built-in floating-point types? раздела Math Toolkit 2.5.0 Using Boost.Math with High-Precision Floating-Point Libraries может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Using Boost.Math with High-Precision Floating-Point Libraries ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 08:26:53/0.0062539577484131/0