std::ilogb
Материал из 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>
|
||
int ilogb( float arg ); |
(начиная с C++11) | |
int ilogb( double arg ); |
(начиная с C++11) | |
int ilogb( long double arg ); |
(начиная с C++11) | |
double ilogb( Integral arg ); |
(начиная с C++11) | |
#define FP_ILOGB0 /*implementation-defined*/ |
(начиная с C++11) | |
#define FP_ILOGBNAN /*implementation-defined*/ |
(начиная с C++11) | |
Extracts the value of the exponent from the floating-point argument arg
, and returns it as a signed integer value. Formally, the result is the integral part of log
r|arg| as a signed integral value, for non-zero arg, where r
is std::numeric_limits<T>::radix and T
is the floating-point type of arg
.
Содержание |
[править] Параметры
arg | - | плавающей точкой
Оригинал: floating point value Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. |
[править] Возвращаемое значение
The floating-point exponent, cast to integer, as if by static_cast<int>(std::logb(arg)).
Домена или диапазона ошибка может возникнуть, если
arg
равна нулю, FP_ILOGB0 возвращается в том случае.Оригинал:
Domain or range error may occur if
arg
is zero, FP_ILOGB0 is returned in that case.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Домена или диапазона ошибка может возникнуть, если
arg
бесконечно, MAX_INT возвращается в том случае.Оригинал:
Domain or range error may occur if
arg
is infinite, MAX_INT is returned in that case.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Домена или диапазона ошибка может возникнуть, если
arg
является NaN, FP_ILOGBNAN возвращается в том случае.Оригинал:
Domain or range error may occur if
arg
is NaN, FP_ILOGBNAN is returned in that case.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если результат не может быть представлен как int, результат не определен.
Оригинал:
If the result cannot be represented as int, the result is undefined.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
[править] Notes
Значение показателя возвращается std::ilogb всегда равен 1 меньше показателя настраивали на std::frexp из-за различных требований нормализации: для показателя
| находится между 1 и
| между 0.5 и 1.
e
возвращается std::ilogb, |arg*r-e| находится между 1 и
r
(обычно между 1 и 2), но для экспоненты e
возвращается std::frexp, |arg*2-e| между 0.5 и 1.
Оригинал:
The value of the exponent returned by std::ilogb 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::ilogb, |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. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (функция) |