![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Sign Manipulation FunctionsBoost , Math Toolkit 2.5.0 , Chapter 2. Floating Point Utilities
|
![]() |
Important |
---|---|
Возвратное значение от этой функции равно нулю илиненулю.иненоль или один. |
template <class T> int sign (const T& z);
Возвращается<1
>, еслиx<>0
>,<-1
>, еслиxи<0
>, еслиxравен нулю.
template <class T, class U> calculated-result-type copysign (const T& x, const U& y);
Устанавливает знакxтаким же, как знаку.
См.C99 7.12.11.1 Копировалдля более подробной информации.
template <class T> T changesign (const T& z);
Возвращает число с плавающей точкой с бинарным представлением, где сигбит является противоположностью бита знака вx, и где другие биты такие же, как вx.
Эта функция широко доступна, но не указана ни в каких стандартах.
Обоснование: Не указано в TR1, но<changesign(x)
>как легче читать, так и эффективнее.
copysign(x, signbit(x) ? 1.0 : -1.0);
Для конечных значений эта функция имеет тот же эффект, что и простое отрицание, назначение z = -z, но для неконечных значенийбесконечностейиNaNsфункция<changesign(x)
>может быть единственным переносным способом обеспечить изменение бита знака.
Один из битов в двоичном представлении числа с плавающей точкой дает знак, а остальные биты дают абсолютное значение. Этот бит известен как бит знака. Бит знака установлен = 1 для отрицательных чисел и не установлен = 0 для положительных чисел. (Это верно для всех бинарных представлений чисел с плавающей запятой, которые используются современными микропроцессорами.)
C++ TR1определяет<copysign
>функции и шаблоны функций для доступа к биту знака.
Для определенных пользователем типов (UDT) знак может храниться каким-либо другим способом. Они также могут не обеспечивать бесконечность или NaN. Чтобы использовать эти функции с помощью UDT, может потребоваться их явная специализация для типа T UDT.
signbit(3.5) is zero (or false) signbit(-7.1) is 1 (or true) copysign(4.2, 7.9) is 4.2 copysign(3.5 -1.4) is -3.5 copysign(-4.2, 1.0) is 4.2 copysign(-8.6, -3.3) is -8.6 changesign(6.9) is -6.9 changesign(-1.8) is 1.8
Библиотека поддерживает следующие двоичные форматы с плавающей точкой:
Библиотека не поддерживает форматы с плавающей точкой VAX. (Они доступны на VMS, но по умолчанию на VMS является формат IEEE 754 с плавающей запятой.)
Основными проблемами переносимости являются:
boost/detail/endian.hpp
>, чтобы определить эндианность.#ifdefined(__ia64)||defined(__ia64__)||defined(_M_IA64)
>.Библиотека прошла все тесты на следующих платформах:
Статья Sign Manipulation Functions раздела Math Toolkit 2.5.0 Chapter 2. Floating Point Utilities может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 2. Floating Point Utilities ::
реклама |