Double-Precision ponto flutuante variável O C ++

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 precisão dupla de ponto flutuante como se segue:

double-double dValue1 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 problema de truncagem, considere a média de três variáveis ​​de ponto flutuante dValue1, dValue2, e dValue3 dada pela fórmula

dupla 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

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

que é, por sua vez, equivale a

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

resultando em um valor final de

dupla DAVERAGE = 1,666 ...-

As expressões anteriores são escritos como se houvesse um número infinito de sixes depois do ponto decimal. Na verdade, este não é o caso. A precisão de um duplo está limitado a cerca de 14 algarismos significativos. A diferença entre 1,666666666666 e 1 2/3 é pequeno, mas não zero.

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

C ++ assume que um número seguido por um ponto decimal é um ponto flutuante constante. Assim, ele assume 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 ++.

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 após o 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, enquanto que 3.0 está sujeita às regras da aritmética de ponto flutuante.

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

dupla dValue = 1,0-double dOneThird = dValue / 3-

Tecnicamente isso é o que é conhecido como um Modo misto expressão, porque dValue é uma 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 a um duplo e executa aritmética de ponto 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-

a atribuição de um duplo para um int é conhecido como um rebaixamento.

compiladores alguns C ++ gerar um aviso quando a promoção de uma variável. Todos os compiladores C ++ gerar um aviso (ou de 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 molde, 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 é utilizado aqui. Isso é apenas uma convenção. Você pode nomear suas variáveis ​​de qualquer maneira que você gosta - C ++ não importa.

menu