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

FAQ

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 40. Boost.Units 1.1.0

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

FAQ

Потому что буст. Единицы включают плоские и твердоугольные блоки в системе СИ, крутящий момент и энергия, по сути, различимы (см.крутящий момент).. Кроме того, энергия является истиннойскалярнойвеличиной, в то время как крутящий момент, несмотря на наличие тех же единиц, что и энергия, если угол плоскости не включен, на самом деле являетсяпсевдовектором. Таким образом, также может быть реализован тип значений, представляющий псевдовекторы и инкапсулирующий их алгебру.

Однако есть несколько единиц СИ, которые неразличимы в системе СИ. К ним относятсябеккерель, который имеет единицы, идентичные частоте (Гц), исиверт, который вырождается ссерым. В таких случаях правильный способ лечения этой разницы состоит в том, чтобы признать, что расширение набора базовых размеров может обеспечить неоднозначность. Например, добавление базового измерения для радиоактивных распадов позволило бы записывать беккерель как распад/секунду, отличая его от подписи герца, которая составляет всего 1/секунду.

Если вам это не нравится, вы можете просто игнорировать угловые единицы и идти своим веселым путем (периодически облажаться, когда рутина хочет градусов, и вы даете ей радианы вместо этого).

Рассмотрим следующий код:

cout << sin(asin(180.0 * degrees));

Что должен напечатать этот отпечаток? Если бы были доступны только гетерогенные системы, он бы напечатал 3.14159 + rad Почему? Что ж,<asin>вернет<quantity<dimensionless>>фактически потеряв информацию о том, что используются степени. Для распространения этой дополнительной информации нам нужны однородные системы.

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

quantity<si::length>    q(1.0);

Здесь цель ясна - мы хотим длину одного в системе СИ, которая составляет один метр. Однако представьте себе, что какой-то благонамеренный программист пытается повторно использовать этот код, но вместо этого он выполняет вычисления в системе блоков CGS. После поиска<si::>и замены<cgs::>у нас есть:

quantity<cgs::length>	q(1.0);

К сожалению, значение этого утверждения внезапно изменилось с одного метра на один сантиметр. В отличие от реализованного, мы начинаем с:

quantity<si::length>	q(1.0*si::meter);

После поиска и замены:

quantity<cgs::length>	q(1.0*cgs::meter);

Что приводит нас к ошибке. Даже если код имеет расширение пространства имен::units:::si; декларация, последняя все еще безопасна:

using namespace boost::units::si;
quantity<length>	q(1.0*meter);

идти

using namespace boost::units::cgs;
quantity<length>	q(1.0*meter);

Последнее будет включать в себя явное преобразование от метров до сантиметров, но значение остается верным.

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


PrevUpHomeNext

Статья FAQ раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 40. Boost.Units 1.1.0 может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 40. Boost.Units 1.1.0 ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:05:08/0.0070428848266602/0