Diferença entre Float e Double - Qual deveria usar? Diferença entre
(Nota: Este artigo assume que os leitores sabem sobre os princípios básicos da Ciência da Computação)
Muitos programadores / estudantes iniciantes que estão matriculados em Ciência da Computação fazem as perguntas freqüentes que são relevantes para o campo específico da Ciência da Computação que eles estudam. A maioria dos cursos iniciantes começam com os tópicos do sistema numérico que é usado nos computadores modernos, incluindo o binário , decimal , octal e hexadecimal < sistema. Estes são os formatos de números de computador que são as representações internas de valores numéricos em computadores (ou calculadoras e qualquer outro tipo de computadores digitais). Esses valores são armazenados como "agrupamento de bits".
Como sabemos, os computadores representam dados em conjuntos de dígitos binários (ou seja, na combinação de1s e 0s , como, 1111 representa 15 no sistema decimal), faz sentido ensinar sobre os diferentes formatos de números que são usados para representar uma gama dinâmica de valores, porque compõem os blocos básicos do processamento de cálculo / número em qualquer tipo de operação. Uma vez que o sistema de números é definido na sala de aula (muitas vezes mal), os estudantes ficam tentados a mover-se para os diferentes formatos de números do mesmo tipo (i. E., aritmética de ponto flutuante ) que possuem certa precisão e intervalo de números. Assim, eles são forçados a aprender as nuances entre certos tipos. Dois dos tipos de dados mais utilizados são Float e Double , e enquanto eles visam as mesmas necessidades (ou seja, aritmética de ponto flutuante ), há bastante alguma diferença na sua representação interna e efeito geral sobre o cálculo no programa. É lamentável que muitos programadores faltem as nuances entre os tipos de dados Flat e Double e acabem por usá-los em locais onde não deveriam ser usados em primeiro lugar. Em última análise, resultou em erros de cálculo em outras partes do programa.
Float vs. Double … Qual é o negócio?
Float e Double são a representação de dados que são usados para as operações aritméticas de ponto flutuante, pense nos números decimais que você calcula na classe de matemática, como
20. 123 , 16. 23 , 10. 2 , etc., não são números inteiros (isto é, 2 , 5 , 15 , etc.), pelo que exigem a consideração de frações no binário. Como os números decimais resultantes (i. E., 20. 123 , 16. 23 , etc.) não pode ser facilmente representado com um formato binário normal (i. e., Integer). A principal diferença entre Float e Double é que o primeiro é o único ponto de precisão de precisão (32 bits), enquanto o último é tipo de dados de ponto flutuante de dupla precisão (64 bits). Double é chamado de "duplo" porque basicamente é uma versão de dupla precisão do Float. Se você estiver calculando uma quantidade enorme (pense nos milhares de 0 no número), as imprecisões serão menores no Double e você não perderá muita precisão.
#include
int main () {
float num1 = 1. f / 82;
float num2 = 0;
para (int i = 0; i <738; ++ i)
num2 + = num1;
printf ("%. 7g n", num2);
número duplo3 = 1. 0/82;
para (int i = 0; i <738; ++ i)
num4 + = num3;
printf ("%. 15g n", num4);
getchar ();
}
Imprime o seguinte:
9. 000031
8. 99999999999983
Aqui, você pode ver que a pequena diferença na precisão de Float e Double dá uma resposta diferente, embora o Double pareça ser mais preciso que o Float.
#include
#include
int main () {
float num1 = sqrt (2382719676512365. 1230112312312312);
número duplo = sqrt (2382719676512365. 1230112312312312);
printf ("% f n", num1);
printf ("% f n", num2);
getchar ();
}
Ele fornece a seguinte saída:
48813108. 000000
48813109. 678778
Aqui, você pode ver que a resposta no Double tem uma precisão melhor.
Em suma, é melhor usar o Double para aritmética de ponto flutuante, já que várias funções matemáticas padrão em C operam em computadores duplos e modernos são extremamente rápidos e eficientes para cálculos de ponto flutuante duplos. Isso leva a reduzir a necessidade de usar o Float, a menos que você precise operar em muitos números de ponto flutuante (pense em matrizes grandes com milhares de 0 nos números) ou você está operando em um sistema que não suporta dual- ponto flutuante de precisão, tantas GPUs, dispositivos de baixa potência e certas plataformas (ARM Cortex-M2, Cortex-M4, etc.) não suportam o Double ainda, então você deve usar Float. Além disso, uma coisa a lembrar é que algumas GPUs / CPUs funcionam melhor / eficiente no processamento de flutuadores, como no cálculo de vetores / matriz, então você pode precisar procurar no manual / documentação da especificação de hardware para decidir melhor qual você deve usar para uma máquina particular.
Raramente existe uma razão para usar o Float em vez do Double no código que visa computadores modernos. A precisão extra em Double reduz, mas não elimina, a chance de erros de arredondamento ou outra imprecisão que possa causar problemas em outras partes do programa. Muitas funções de matemática ou operadores convertem e retornam Double, então você não precisa converter os números de volta para Float, pois isso pode perder a precisão.Para uma análise detalhada sobre a aritmética de ponto flutuante, eu recomendo que você leia este fantástico artigo (// docs. Oracle. Com / cd / E19957-01 / 806-3568 / ncg_goldberg. Html).
Resumo
Então … em poucas palavras:
Locais onde você deve usar Float:
Se você está segmentando hardware onde a precisão única é mais rápida do que a dupla precisão.
- Sua aplicação faz uso intensivo da aritmética de ponto flutuante, como milhares de números com milhares de 0's.
- Você está fazendo otimização de muito baixo nível. Por exemplo, você está usando instruções especiais da CPU (i. E., SSE, SSE2, AVX, etc.) que operam em vários números / arrays / vetores de cada vez.