El c ++ variable de coma flotante de doble precisión
La variable de coma flotante estándar en C ++ es su hermano mayor, el Doble precisión
punto flotante o simplemente doble. Usted declara una coma flotante de la siguiente doble precisión:doble dValue1 doble dValue2 = 1,5
Las limitaciones de la int variable en C ++ son inaceptables en algunas aplicaciones. Afortunadamente, C ++ entiende números decimales que tienen una parte fraccionaria. (Los matemáticos llaman éstos numeros reales.) En C ++, los números decimales se llaman números de punto flotante o simplemente flotadores. Esto es debido a que el punto decimal puede flotar alrededor de izquierda a derecha para manejar valores fraccionarios.
Las variables de punto flotante vienen en dos sabores básicos en C ++. La pequeña variedad se declara mediante el uso de la palabra clave flotador como sigue:
flotar fValue1 - // declarar una pointfloat flotante fValue2 = 1,5 // inicializar al declaración
Resolver el problema de truncamiento
Para ver cómo el doble fija nuestro problema de truncamiento, considere la media de tres variables de coma flotante dValue1, dValue2, y dValue3 dada por la fórmula
doble BDPROMEDIO = dValue1 / 3.0 + dValue2 / 3.0 + dValue3 / 3.0-
Supongamos que, una vez más, los valores iniciales de 1,0, 2,0, y 2,0. Esto hace que la expresión que acabamos de dar aquí como equivalente a
doble BDPROMEDIO = 1,0 / 3,0 + 2,0 / 3,0 + 2,0 / 3.0-
que es, a su vez, equivalente a
doble BDPROMEDIO = 0,333 ... + 0.6666 + 0.6666 ... ...-
lo que resulta en un valor final de
doble BDPROMEDIO = 1,666 ...-
Las expresiones anteriores se escriben como si no hubiera un número infinito de seises después del punto decimal. De hecho, este no es el caso. La precisión de un doble se limita a alrededor de 14 dígitos significativos. La diferencia entre 1,666666666666 y 1 2/3 es pequeño, pero no cero.
Cuando un número entero no es un entero
C ++ supone que un número seguido de un punto decimal es una coma flotante constante. Por lo tanto se supone que 2.5 es un punto flotante. Esta regla de punto decimal es cierto incluso si el valor a la derecha del punto decimal es cero. Así 3.0 es también un punto flotante. La distinción entre 3 y 3.0 parece pequeña para usted, pero no a C ++.
En realidad, usted no tiene que poner nada a la derecha del punto decimal. Por lo tanto C ++ también ve 3. como doble. Sin embargo, se considera un buen estilo para incluir el 0 después del punto decimal para todas las constantes de punto flotante.
Frikis informáticos estarán interesados en saber que las representaciones internas de 3 y 3.0 son totalmente diferentes (bostezo). Más importante aún, la constante int 3 está sujeta a int reglas, mientras que 3.0 está sujeto a las reglas de la aritmética de punto flotante.
Por lo tanto usted debe tratar de evitar expresiones como las siguientes:
doble dValue = 1.0 de doble dOneThird = dValue / 3-
Técnicamente esto es lo que se conoce como modo mezcla expresión porque dValue es un doble pero 3 es una int. Bueno, C ++ no es un idiota - que sabe lo que quiere en un caso como éste, por lo que convierte la 3 a un doble y realiza aritmética de punto flotante.
Hay un nombre para este poco de magia: C ++ promueve el int 3 a una doble. C ++ también le permite asignar un resultado de coma flotante a un int variables:
int nValue = dValue / 3.0-
Asignación de una doble a un int que se conoce como una degradación.
Algunos compiladores de C ++ generan una advertencia cuando la promoción de una variable. Todos los compiladores C ++ generan una advertencia (o error) al degradar resultado debido a la pérdida de precisión.
Usted debe adquirir el hábito de evitar de modo mixto aritmética. Si tiene que cambiar el tipo de una expresión, hacerlo explícitamente usando un yeso, como en el siguiente ejemplo:
fn void (int nArg) {// calcular un tercio de nArg- usar un yeso a // promoverlo a un pointdouble dOneThird = (doble) nArg / 3.0 flotante - // ... la función continúa
La convención de nomenclatura de iniciar las variables dobles de doble precisión con la letra d se utiliza aquí. Eso no es más que una convención. Usted puede nombrar a sus variables como quieras - C ++ no le importa.