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 субнормальна, он рассматривается как если бы она была нормализована.Original:
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.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Содержание |
[править] Параметры
| arg | - | плавающей точкой
Original: floating point value The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
[править] Возвращаемое значение
Плавающей точкой показателем.
Original:
The floating-point exponent.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Домена или диапазона ошибка может возникнуть, если
arg равна нулю.Original:
Domain or range error may occur if
arg is zero.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[править] 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.
Original:
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.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[править] Пример
Сравнивает различные функции с плавающей точкой разложения
Original:
Compares different floating-point decomposition functions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#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 Original: decomposes a number into significand and a power of 2 The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (функция) | |
| (C++11) |
извлекает показатель числа Original: extracts exponent of the number The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (функция) |
| (C++11) (C++11) |
число умножается на FLT_RADIX, возведенное в степень Original: multiplies a number by FLT_RADIX raised to a power The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (функция) |