Diferença entre Float e Double - Qual deveria usar? Diferença entre

Anonim

(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 de

1s 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.

Neste artigo, vou dizer-lhe a diferença entre flutuante e duplo com os exemplos de código na linguagem de programação C. Vamos começar!

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.

É melhor elaborar usando os exemplos de código. O seguinte é a operação em Float e Double através das funções matemáticas fornecidas na linguagem C:

#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;

número duplo 4 = 0;

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.

A seguir, o exemplo da função sqrt () em C:

#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.
Conclusão

Neste artigo, destaquei a diferença entre Float e Double e qual deveria ser usado em locais específicos. Com razão, é melhor usar Double na maioria dos lugares, cegamente, especialmente se você está visando computadores modernos, pois as chances de baixa eficiência devido ao uso de aritmética de ponto flutuante duplo são altamente improváveis. Se você tiver alguma dúvida, você pode perguntar na seção de comentários abaixo!