Freqüentemente, na minha experiência em programação, preciso tomar uma decisão se devo usar float ou double para meus números reais. Às vezes eu vou flutuar, às vezes eu vou dobrar, mas isso realmente parece mais subjetivo. Se eu fosse confrontado para defender minha decisão, provavelmente não daria razões sólidas.
Quando você usa float e quando usa double? Você sempre usa o dobro, somente quando há restrições de memória que você usa para flutuar? Ou você sempre usa float, a menos que o requisito de precisão exija o uso duplo? Existem diferenças substanciais em relação à complexidade computacional da aritmética básica entre float e double? Quais são os prós e os contras do uso de float ou double? E você já usou long double?
c++
c
floating-point
numbers
Jakub Zaverka
fonte
fonte
Respostas:
A opção padrão para um tipo de ponto flutuante deve ser
double
. Este é também o tipo que obtém com literais de ponto flutuante sem um sufixo ou (em C) funções padrão que operam em números de ponto flutuante (por exemploexp
,sin
, etc.).float
só deve ser usado se você precisar operar com muitos números de ponto flutuante (pense na ordem de milhares ou mais) e a análise do algoritmo mostrou que o alcance e a precisão reduzidos não representam um problema.long double
pode ser usado se você precisar de mais alcance ou precisão do quedouble
e se isso for fornecido na sua plataforma de destino.Em resumo,
float
elong double
deve ser reservado para uso dos especialistas, comdouble
uso "diário".fonte
float
(e ocasionalmente meia precisão) porque nem o olho humano, a exibição ou o sistema de cores tem tantos bits de precisão . Este conselho é aplicável, por exemplo, OpenGL etc. Este conselho adicional não se aplica a imagens médicas, que possuem requisitos de precisão mais estritos.Raramente há motivos para usar float em vez de duplicar no código destinado aos computadores modernos. A precisão extra reduz (mas não elimina) a chance de erros de arredondamento ou outra imprecisão causando problemas.
Os principais motivos pelos quais posso pensar em usar o float são:
Portanto, basicamente, o dobro é o caminho a menos, a menos que você tenha limitações de hardware ou que a análise mostre que o armazenamento de números de precisão dupla está contribuindo significativamente para o uso da memória.
fonte
Use
double
para todos os seus cálculos e variáveis temporárias. Usefloat
quando precisar manter uma matriz de números -float[]
(se a precisão for suficiente) e estiver lidando com dezenas de milhares defloat
números.Muitas / a maioria das funções ou operadores matemáticos convertem / retornam
double
e você não deseja converter os números de voltafloat
para nenhuma etapa intermediária.Por exemplo, se você tiver uma entrada de 100.000 números de um arquivo ou fluxo e precisar classificá-los, coloque os números em a
float[]
.fonte
Algumas plataformas (ARM Cortex-M2, Cortex-M4 etc.) não suportam o dobro (sempre pode ser verificado no manual de referência do seu processador. Se não houver avisos ou erros de compilação, isso não significa que o código seja ideal. double pode ser emulado.). É por isso que você pode precisar manter int ou flutuar .
Se não for esse o caso, eu usaria o dobro .
Você pode conferir o famoso artigo de D. Goldberg ("O que todo cientista da computação deve saber sobre aritmética de ponto flutuante"). Você deve pensar duas vezes antes de usar a aritmética de ponto flutuante. Há uma grande chance de que eles não sejam necessários em sua situação específica.
http://perso.ens-lyon.fr/jean-michel.muller/goldberg.pdf
fonte
Para problemas do mundo real, o limite de amostragem dos seus dados é importante ao responder a essa pergunta. Da mesma forma, o piso de ruído também é importante. Se qualquer um for excedido pela sua seleção de tipo de dados, nenhum benefício será obtido com o aumento da precisão.
A maioria dos samplers do mundo real é limitada a DACs de 24 bits. Sugerindo que 32 bits de precisão nos cálculos do mundo real sejam adequados onde o significando seja 24 bits de precisão.
A precisão dupla tem o custo de 2x memória. Portanto, limitar o uso de duplas sobre flutuadores pode reduzir drasticamente o espaço ocupado por memória / largura de banda dos aplicativos em execução.
fonte
A escolha de qual variável usar entre float e double depende da precisão dos dados necessários. Se uma resposta precisar de uma diferença desprezível da resposta real, o número de casas decimais necessárias será grande, portanto, ditará que o dobro estará em uso. O flutuador cortará algumas partes das casas decimais, reduzindo assim a precisão.
fonte
Normalmente, uso o
float
tipo quando não preciso de muita precisão - por exemplo, por dinheiro - o que está errado, mas é o que estou acostumado a fazer de maneira errada.Por outro lado, uso
double
quando preciso de mais precisão, por exemplo, para algoritmos matemáticos complexos.O padrão C99 diz o seguinte:
Eu realmente nunca usei
long double
, mas não uso muito C / C ++. Normalmente eu uso linguagens dinamicamente tipadas como Python, onde você não precisa se preocupar com os tipos.Para mais informações sobre Double vs Float , consulte esta pergunta em SO .
fonte
Decimal
é um tipo de ponto flutuante e geralmente é uma boa opção para cálculos de dinheiro.