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

Sign Manipulation Functions

Boost , Math Toolkit 2.5.0 , Chapter 2. Floating Point Utilities

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
Synopsis
#include <boost/math/special_functions/sign.hpp>
namespace boost{ namespace math{
template<class T>
int signbit(T x);
template <class T>
int sign (const T& z);
template <class T, class U>
T copysign (const T& x, const U& y);
template <class T>
calculated-result-type changesign (const T& z);
}} // namespaces
Description
template<class T>
int signbit(T x);

Возвращает ненулевое значение, если бит знака установлен в переменнойx, иначе<0>.

[Important] 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)>может быть единственным переносным способом обеспечить изменение бита знака.

Sign bits

Один из битов в двоичном представлении числа с плавающей точкой дает знак, а остальные биты дают абсолютное значение. Этот бит известен как бит знака. Бит знака установлен = 1 для отрицательных чисел и не установлен = 0 для положительных чисел. (Это верно для всех бинарных представлений чисел с плавающей запятой, которые используются современными микропроцессорами.)

C++ TR1определяет<copysign>функции и шаблоны функций для доступа к биту знака.

Для определенных пользователем типов (UDT) знак может храниться каким-либо другим способом. Они также могут не обеспечивать бесконечность или NaN. Чтобы использовать эти функции с помощью UDT, может потребоваться их явная специализация для типа T UDT.

Examples
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
Portability

Библиотека поддерживает следующие двоичные форматы с плавающей точкой:

  • Единая точность IEEE 754
  • IEEE 754 двойная точность
  • IEEE 754 расширенная двойная точность с 15 экспонентными битами
  • Intel увеличила двойную точность
  • Власть PC получил двойную точность
  • Motorola 68K отличается двойной точностью

Библиотека не поддерживает форматы с плавающей точкой VAX. (Они доступны на VMS, но по умолчанию на VMS является формат IEEE 754 с плавающей запятой.)

Основными проблемами переносимости являются:

  • Неподдерживаемые форматы с плавающей запятой.
  • Библиотека зависит от заголовка<boost/detail/endian.hpp>, чтобы определить эндианность.
  • Для определения типа процессора используется код<#ifdefined(__ia64)||defined(__ia64__)||defined(_M_IA64)>.

Библиотека прошла все тесты на следующих платформах:

  • Win32 / MSVC 7.1 / 10.0 / x86 32 и 64-разрядный, а позже Win32
  • Win32 / Intel C++ 7.1, 8.1, 9.1 / x86
  • Mac OS X / GCC 3.3, 4.0 / ppc
  • Linux / Intel C++ 9.1 / x86, ia64
  • Linux / GCC 3.3 / x86, x64, ia64, ppc, hppa, mips, m68k
  • Linux / GCC 3.4 / x64
  • HP-UX/aCC, GCC 4.1/ia64
  • HP-UX / ACC / hppa
  • Tru64 / Compaq C++ 7.1 / альфа
  • VMS / HP C++ 7.1 / альфа (в режиме плавающей точки IEEE)
  • VMS / HP C++ 7.2 / ia64 (в режиме плавающей точки IEEE)

PrevUpHomeNext

Статья Sign Manipulation Functions раздела Math Toolkit 2.5.0 Chapter 2. Floating Point Utilities может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 2. Floating Point Utilities ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-04 20:54:33/0.0033669471740723/0