O c ++ dupla precisão variável de ponto flutuante

A variável de ponto flutuante padrão em C ++ é o seu irmão maior, o dupla precisão

ponto flutuante ou simplesmente Duplo. Você declarar uma dupla precisão de ponto flutuante como segue:

dValue1 duplo-duplo dValue2 = 1.5-

As limitações do int variável em C ++ são inaceitável em algumas aplicações. Felizmente, C ++ entende números decimais que têm uma parte fracionária. (Os matemáticos chamam estes numeros reais.) Em C ++, números decimais são chamados números de ponto flutuante ou simplesmente flutuadores. Isso ocorre porque o ponto decimal pode flutuar em torno da esquerda para a direita para lidar com valores fracionários.

variáveis ​​de ponto flutuante vêm em dois sabores básicos em C ++. A pequena variedade é declarado usando a palavra-chave flutuador do seguinte modo:

flutuar fValue1 - // declarar uma pointfloat flutuante fValue2 = 1.5- // inicializa-lo na declaração

Resolver o problema de truncamento

Para ver como a Duplo corrige o nosso problema truncagem, considere a média de três variáveis ​​de ponto flutuante dValue1, dValue2, e dValue3 dada pela fórmula

Video: 017 Variáveis de ponto flutuante Float ou Double

duplo DAVERAGE = dValue1 / 3.0 + dValue2 / 3.0 + dValue3 / 3.0-

Suponha, mais uma vez, os valores iniciais de 1,0, 2,0, e 2,0. Isso torna a expressão apenas dado aqui como equivalente a

duplo DAVERAGE = 1,0 / 3,0 + 2,0 / 3,0 + 2,0 / 3.0-

que é, por sua vez, equivale a

double DAVERAGE = 0,333 ... + 0,6666 ... + 0,6666 ...-

resultando em um valor final de

Video: Aula 2 - Cálculo Numérico: Aritmética de Ponto Flutuante - Resolução de Exercícios

duplo DAVERAGE = 1,666 ...-


As expressões anteriores são escritos como se não houvesse um número infinito de par de seis após o ponto decimal. Na verdade, este não é o caso. A precisão de um duplo é limitado a cerca de 14 dígitos significativos. A diferença entre 1,666666666666 e 1 2/3 é pequeno, mas não zero.

Video: Licenciatura em Computação - Notação Ponto Flutuante (Prof Gilberto Farias)

Quando um número inteiro não é um número inteiro

C ++ que assume um número seguido por um ponto decimal é uma constante de ponto flutuante. Assim supõe-se que 2,5 é um ponto flutuante. Esta regra de ponto decimal é verdadeiro mesmo se o valor à direita do ponto decimal é zero. Assim 3.0 também é um ponto flutuante. A distinção entre 3 e 3,0 parece pequeno para você, mas não para C ++.

Video: Complemento de 1 e 2 e Ponto Flutuante

Na verdade, você não tem que colocar qualquer coisa à direita do ponto decimal. Assim, C ++ também vê 3. como um Duplo. No entanto, é considerado um bom estilo para incluir a 0 depois do ponto decimal para todas as constantes de ponto flutuante.

geeks de computador vai estar interessado em saber que as representações internas de 3 e 3,0 são totalmente diferentes (bocejo). Mais importante ainda, a constante int 3 é sujeito a int regras, ao passo que 3,0 é sujeito às regras da aritmética de ponto flutuante.

Assim, você deve tentar evitar expressões como as seguintes:

duplo dValue = 1,0-duplo dOneThird = dValue / 3-

Tecnicamente isso é o que é conhecido como um Modo misto expressão porque dValue é um Duplo mas 3 é uma int. Ok, C ++ não é um idiota total - ele sabe o que quer em um caso como este, por isso converte a 3 para a Duplo e executa aritmética de vírgula flutuante.

Há um nome para este pouco de magia: C ++ promove a int 3 para uma Duplo. C ++ também permite atribuir um resultado de ponto flutuante para um int variável:

int nValue = dValue / 3.0-

atribuir um Duplo para um int é conhecido como um rebaixamento.

compiladores alguns C ++ gerar um aviso quando a promoção de uma variável. compiladores Todos C ++ gerar um aviso (ou erro) quando rebaixar um resultado devido à perda de precisão.

Você deve adquirir o hábito de evitar de modo misto aritmética. Se você tiver que alterar o tipo de uma expressão, fazê-lo explicitamente usando um elenco, como no exemplo a seguir:

fn void (int nArg) {// calcula um terço dos nArg- usar um elenco para // promovê-lo a um flutuante pointdouble dOneThird = (double) nArg / 3.0 - // ... Função continua

A convenção de nomenclatura de começar variáveis ​​duplas de precisão dupla com a letra d é usado aqui. Isso é apenas uma convenção. Você pode nomear suas variáveis ​​de qualquer maneira que você gosta - C ++ não importa.


Publicações relacionadas