std::ilogb
De cppreference.com
<metanoindex/>
<tbody> </tbody>| Definido no cabeçalho <cmath>
|
||
int ilogb( float arg ); |
(desde C++11) | |
int ilogb( double arg ); |
(desde C++11) | |
int ilogb( long double arg ); |
(desde C++11) | |
double ilogb( Integral arg ); |
(desde C++11) | |
#define FP_ILOGB0 /*implementation-defined*/ |
(desde C++11) | |
#define FP_ILOGBNAN /*implementation-defined*/ |
(desde 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.
Parâmetros
| arg | - | flutuando valor de ponto
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. |
Valor de retorno
The floating-point exponent, cast to integer, as if by static_cast<int>(std::logb(arg)).
Erro domínio ou intervalo pode ocorrer se
arg é zero, FP_ILOGB0 é retornado, nesse caso,.Original:
Domain or range error may occur if
arg is zero, FP_ILOGB0 is returned in that case.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.
Erro de domínio ou intervalo pode ocorrer se
arg é infinito, MAX_INT é devolvido em caso.Original:
Domain or range error may occur if
arg is infinite, MAX_INT is returned in that case.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.
Erro de domínio ou intervalo pode ocorrer se
arg é NaN, FP_ILOGBNAN é devolvido em caso.Original:
Domain or range error may occur if
arg is NaN, FP_ILOGBNAN is returned in that case.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.
Se o resultado não pode ser representado como
int, o resultado é indefinido.Original:
If the result cannot be represented as
int, the result is undefined.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.
Notas
O valor do expoente retornado por std::ilogb é sempre 1 a menos do que o expoente retuned std::frexp por causa das exigências de normalização diferentes: para o expoente
| está entre 1 e
| é entre
e retornado por std::ilogb, |arg*r-e| está entre 1 e
r (tipicamente entre 1 e 2), mas para o expoente e retornado por std::frexp, |arg*2-e| é entre
0.5 e 1.Original:
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
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.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.
Exemplo
Compara diferentes funções de ponto flutuante de decomposição
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';
}
Saída:
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
