Los límites de números de punto flotante en c ++

Aunque las variables de coma flotante en C ++ pueden solucionar muchos problemas de cálculo, tales como truncamiento, tienen algunas limitaciones propios - el reverso de las asociadas con variables enteras. las variables de punto flotante no se pueden utilizar para contar las cosas, son más difíciles para el equipo de manejar, y también sufren de errores de redondeo (aunque no casi en el mismo grado como int variables).

Contando

No se puede utilizar variables de punto flotante en aplicaciones en las que el conteo es importante. Esto incluye C ++ construye que cuentan. C ++ no puede verificar que el valor número entero que se entiende por un número de coma flotante dado.

Por ejemplo, es claro para usted que 1.0 es 1, pero no tan claro para C ++. ¿Qué hay de 0,9 o 1,1? En caso de que estos también ser considerados como 1? C ++ simplemente evita el problema insistiendo en el uso de int Cuando se cuentan los valores se tratara.

velocidad de cálculo

Históricamente, un procesador de ordenador puede procesar la aritmética de enteros más rápido de lo que puede aritmética de punto flotante. Por lo tanto, mientras que un procesador puede añadir 1 millón de números enteros en una determinada cantidad de tiempo, el mismo procesador puede ser capaz de realizar sólo 200.000 cálculos de punto flotante durante el mismo período.

velocidad de cálculo se está convirtiendo en un problema menor ya que los microprocesadores se vuelven más rápidos. Además, los microprocesadores de propósito general de hoy en día incluyen circuitos de punto flotante especial a bordo para aumentar el rendimiento de estas operaciones. Sin embargo, la aritmética de valores enteros es sólo un diablos de mucho más fácil y más rápido que realizar la misma operación en valores de coma flotante.

Pérdida de precisión

Punto flotante flotador variables tienen una precisión de alrededor de 6 dígitos, y un tamaño de economía adicional, la versión de doble potencia de flotador conocido como doble puede manejar cerca de 13 dígitos significativos. Esto puede causar problemas de redondeo así.

Consideran que un tercio se expresa como 0.333 ... en una secuencia continua. El concepto de una serie infinita que tiene sentido en matemáticas, pero no a un ordenador, ya que tiene una precisión finita. los FloatAverage programa produce 1.66667 como el promedio de 1, 2, y 2 - eso es mucho mejor que el 0 por la salida de IntAverage versión, pero ni siquiera cerca de una secuencia infinita.

C ++ puede corregir errores de redondeo en muchos casos. Por ejemplo, en la salida, C ++ a veces puede determinar que el usuario realmente significaba 1 en lugar de 0,999999. En otros casos, incluso C ++ no puede corregir el error de redondeo.

rango no tan limitada

Aunque el doble tipo de datos tiene una gama mucho más grande que el de un número entero, es todavía limitada. El valor máximo para una int es un skosh más de 2 mil millones. El valor máximo de una doble variable es más o menos 10 a la potencia 38a. Eso es un 1 seguido de 38 zeroes- se come 2 mil millones para el desayuno.

Sólo los primeros 13 dígitos o menos de una doble tener ningún sentido- los 25 dígitos restantes son el ruido de haber sucumbido a errores de redondeo de punto flotante.

Artículos Relacionados