C ++ float e double

Neste tutorial, aprenderemos sobre os tipos de dados float e double com a ajuda de exemplos. Também veremos algumas das principais diferenças entre eles e quando usá-los.

Em C ++, os tipos de dados floate doublesão usados ​​para valores de ponto flutuante. Números de ponto flutuante são usados ​​para valores decimais e exponenciais . Por exemplo,

 // creating float type variables float num1 = 3.0f; float num2 = 3.5f; float num3 = 3E-5f; // 3x10^-5 // creating double type variables double num4 = 3.0; double num5 = 3.5; double num6 = 3E-5; // 3x10^-5

Devemos adicionar o sufixo fou Fno final de um floatvalor. Isso ocorre porque o compilador interpreta os valores decimais sem o sufixo como double.

Considere este código.

 float a = 5.6;

Aqui, atribuímos um doublevalor a uma floatvariável.

Nesse caso, 5.6 é convertido para floatpelo compilador automaticamente antes de ser atribuído à variável a. Isso pode resultar em perda de dados. Para saber mais, visite Conversão de tipo C ++.

Diferença entre float e double

flutuador em dobro
Tamanho: 4 bytes Tamanho: 8 bytes
Precisão: em geral, precisão de 7 dígitos decimais Precisão: em geral, precisão de 15 dígitos decimais
Exemplo: 3.56f , 3e5fetc. Exemplo: 3.56 , 3e5etc.

Observação: a menos que você tenha um requisito específico, sempre use em doublevez de float, pois as floatvariáveis ​​podem apresentar erros ao trabalhar com números grandes.

Exemplo 1: C ++ float e double

 #include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )

Resultado

 Número do tipo duplo = 3,91235 Número do tipo flutuante = 3,91235

Nota: O compilador usado para este exemplo (compilador MinGW) permitia 6 dígitos. Assim, nossos valores de variáveis ​​foram arredondados e truncados para 6 dígitos pelo compilador.

setprecision () para especificar pontos decimais

Podemos especificar o número de casas decimais a serem impressas coutusando a setprecision()função.

Esta função é definida no iomaniparquivo de cabeçalho, que significa manipulação de entrada / saída .

Exemplo 2: Usando setprecision () para números de ponto flutuante

 #include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting the precision to 12 decimal places cout << setprecision(13); // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )

Resultado

 Número do tipo duplo = 3,912348239293 Número do tipo flutuante = 3,912348270416

Como podemos ver no exemplo acima, especificamos a precisão de até 13 dígitos.

 cout << setprecision(13);

O valor de ponto flutuante que atribuímos às nossas variáveis ​​também consiste em 13 dígitos.

No entanto, como floattem uma precisão de até 7 dígitos, ele mostra valores de lixo depois que sua precisão é excedida.

Nossa doublevariável mostra o número correto porque tem uma precisão de 15 dígitos, enquanto o próprio número consiste em 13 dígitos.

Como alternativa, podemos especificar precisões diferentes para variáveis ​​diferentes ao imprimi-las.

Exemplo 3: Diferentes Precisões para Diferentes Variáveis

 #include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting precision to 11 for double cout << "Double Type Number = " << setprecision(11) << a << endl; // Setting precision to 7 for float cout << "Float Type Number = " << setprecision(7) << b << endl; return 0; )

Resultado

 Número do tipo duplo = 3,9123482393 Número do tipo flutuante = 3,912348

No programa acima, podemos ver que definimos dois valores de precisão diferentes para floate double.

Em ambos os casos, a precisão é menor do que os dígitos reais do número. Portanto, o último dígito é arredondado e o resto é truncado.

Nota: Se especificarmos a precisão maior do que a precisão do próprio tipo de dados (7 para floate 15 para double), o compilador nos dará valores de lixo após o limite de precisão ter sido excedido, como pode ser visto com a floatsaída no exemplo 2 .

Trabalhe com números exponenciais

Conforme mencionado acima, floate doubletambém pode ser usado para representar números exponenciais . Por exemplo,

 // ex = 325 X (10 25) double ex = 325E25;

C ++ produz números exponenciais e números muito grandes em um formato chamado formato científico . A variável ex será gerada neste formato por padrão, pois é um número muito grande.

Para forçar o C ++ a exibir nossos números de ponto flutuante no scientificformato, independentemente do tamanho do número, usamos o especificador de formato scientificdentro de cout.

 double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;

Além disso, há outro especificador de formato conhecido como fixed, que exibe números de ponto flutuante no formato decimal.

É semelhante a exibir números de ponto flutuante usando apenas coutsem setprecision(), exceto pelo fato de que fixedexibe números de até 6 casas decimais.

Por outro lado, utilizando apenas coutdígitos de exibição de acordo com o compilador específico (6 dígitos no caso do compilador MinGW , incluindo os dígitos antes da vírgula decimal).

Exemplo 4: formatos fixos e científicos

 #include #include using namespace std; int main() ( // Creating a decimal double type variable double a = 3.912348239293; // Creating an exponential double type variable double ex1 = 325e+2; // Creating a float type variable float b = 3.912348239293f; // Creating an exponential float type variable float ex2 = 325e+2f; // Displaying output with fixed cout << "Displaying Output With fixed:" << endl; cout << "Double Type Number 1 = " << fixed << a << endl; cout << "Double Type Number 2 = " << fixed << ex1 << endl; cout << "Float Type Number 1 = " << fixed << b << endl; cout << "Float Type Number 2 = " << fixed << ex2 << endl; // Displaying output with scientific cout << "Displaying Output With scientific:" << endl; cout << "Double Type Number 1 = " << scientific << a << endl; cout << "Double Type Number 2 = " << scientific << ex1 << endl; cout << "Float Type Number 1 = " << scientific << b << endl; cout << "Float Type Number 2 = " << scientific << ex2 << endl; return 0; )

Resultado

 Displaying Output With fixed: Double Type Number 1 = 3.912348 Double Type Number 2 = 32500.000000 Float Type Number 1 = 3.912348 Float Type Number 2 = 32500.000000 Displaying Output With scientific: Double Type Number 1 = 3.912348e+000 Double Type Number 2 = 3.250000e+004 Float Type Number 1 = 3.912348e+000 Float Type Number 2 = 3.250000e+004

long double

Apart from float and double, there is another data type that can store floating-point numbers. This is known as long double.

It usually occupies a space of 12 bytes (depends on the computer system in use), and its precision is at least the same as double, though most of the time, it is greater than that of double.

long double values should end with L. For example,

 // declaring a long double variable long double num_ldb = 2.569L;

Nota: Os tipos de dados de ponto flutuante suportados pelo C ++ são float, doublee long double. Não existe long float.

Artigos interessantes...