std::logb
Материал из cppreference.com
![]() |
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
Определено в заголовочном файле <cmath>
|
||
float logb( float arg ); |
(начиная с C++11) | |
double logb( double arg ); |
(начиная с C++11) | |
long double logb( long double arg ); |
(начиная с C++11) | |
double logb( Integral arg ); |
(начиная с C++11) | |
Извлекает значение показателя с плавающей точкой
r|arg| как подписанное значение с плавающей точкой, для ненулевых аг, где
arg
аргумент, и возвращает его как значение с плавающей точкой. Формально, результатом является неотъемлемой частью logr|arg| как подписанное значение с плавающей точкой, для ненулевых аг, где
r
является std::numeic_limits<T>::radix и T
является плавающей точкой типа arg
. Если arg
субнормальна, он рассматривается как если бы она была нормализована.Оригинал:
Extracts the value of the exponent from the floating-point argument
r|arg| as a signed floating-point value, for non-zero arg, where
arg
, and returns it as a floating-point value. Formally, the result is the integral part of logr|arg| as a signed floating-point value, for non-zero arg, where
r
is std::numeic_limits<T>::radix and T
is the floating-point type of arg
. If arg
is subnormal, it is treated as though it was normalized.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Содержание |
[править] Параметры
arg | - | плавающей точкой
Оригинал: floating point value Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. |
[править] Возвращаемое значение
Плавающей точкой показателем.
Оригинал:
The floating-point exponent.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Домена или диапазона ошибка может возникнуть, если
arg
равна нулю.Оригинал:
Domain or range error may occur if
arg
is zero.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
[править] Notes
Значение показателя возвращается std::logb всегда равен 1 меньше показателя настраивали на std::frexp из-за различных требований нормализации: для показателя
| находится между 1 и
| между 0.5 и 1.
e
возвращается std::logb, |arg*r-e| находится между 1 и
r
(обычно между 1 и 2), но для экспоненты e
возвращается std::frexp, |arg*2-e| между 0.5 и 1.
Оригинал:
The value of the exponent returned by std::logb is always 1 less than the exponent retuned by std::frexp because of the different normalization requirements: for the exponent
| is between 1 and
| is between 0.5 and 1.
e
returned by std::logb, |arg*r-e| is between 1 and
r
(typically between 1 and 2), but for the exponent e
returned by std::frexp, |arg*2-e| is between 0.5 and 1.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
[править] Пример
Сравнивает различные функции с плавающей точкой разложения
Оригинал:
Compares different floating-point decomposition functions
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
#include <iostream> #include <cmath> #include <limits> int main() { double f = 123.45; std::cout << "Given the number " << f << " or " << std::hexfloat << f << std::defaultfloat << " in hex,\n"; double f3; double f2 = std::modf(f, &f3); std::cout << "modf() makes " << f3 << " + " << f2 << '\n'; int i; f2 = std::frexp(f, &i); std::cout << "frexp() makes " << f2 << " * 2^" << i << '\n'; i = std::ilogb(f); std::cout << "logb()/ilogb() make " << f/std::scalbn(1.0, i) << " * " << std::numeric_limits<double>::radix << "^" << std::ilogb(f) << '\n'; }
Вывод:
Given the number 123.45 or 0x1.edccccccccccdp+6 in hex, modf() makes 123 + 0.45 frexp() makes 0.964453 * 2^7 logb()/ilogb() make 1.92891 * 2^6
[править] См. также
разлагается число в значащей и мощностью 2 Оригинал: decomposes a number into significand and a power of 2 Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (функция) | |
(C++11) |
извлекает показатель числа Оригинал: extracts exponent of the number Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (функция) |
(C++11) (C++11) |
число умножается на FLT_RADIX, возведенное в степень Оригинал: multiplies a number by FLT_RADIX raised to a power Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (функция) |