variable type number new float data c# types floating-point

type - number c#



Cuándo usar un flotador (7)

La razón más común que se me ocurre es para ahorrar espacio. No es que esto a menudo valga la pena preocuparse, pero en algunos casos sí importa. Un flotador ocupa la mitad de memoria que un doble, por lo que puede obtener el doble de espacio en el mismo espacio. Por ejemplo, he tenido una serie de números que era demasiado grande para caber en la memoria RAM como dobles, pero que se ajustan como una matriz flota.

Hace años aprendí de la peor manera sobre los problemas de precisión con flotadores, así que dejé de usarlos. Sin embargo, todavía me encuentro con código usando flotadores y me hace temblar porque sé que algunos de los cálculos serán inexactos.

Entonces, ¿cuándo es apropiado usar un flotador?

EDITAR: Como información, no creo haber encontrado un programa donde la precisión de un número no sea importante. Pero me gustaría escuchar ejemplos.


Respuesta corta: solo debe usar un flotador cuando sepa exactamente lo que está haciendo y por qué.

Respuesta larga: por lo que sé, los flotadores (en lugar de los dobles ) ya no se utilizan realmente fuera de las API 3D. Los flotadores y los dobles tienen las mismas características de rendimiento en las CPU modernas, los dobles son algo más grandes y eso es todo. En caso de duda, solo use doble.

Ah, sí, y use el decimal para cálculos financieros, por supuesto.



Hay muchos casos en los que le gustaría usar un float . Lo que no entiendo, sin embargo, es lo que puedes usar en su lugar. Si se refiere al uso de double lugar de float , entonces sí, en la mayoría de los casos, quiere hacer eso. Sin embargo, el double también tendrá problemas de precisión. Debe usar decimal cada vez que la precisión sea importante.

float y double son muy útiles en muchas aplicaciones. decimal es un tipo de datos costoso y su rango (la magnitud del mayor número que puede representar) es menos del double . Las computadoras generalmente tienen soporte de nivel de hardware especial para esos tipos de datos. Se usan mucho en informática científica. Básicamente, son tipos primarios de datos fraccionarios que desea utilizar. Sin embargo, en cálculos monetarios, donde la precisión es extremadamente importante, el decimal es el camino a seguir.


En primer lugar, nunca utilice flotantes o dobles si desea representar valores decimales exactamente: use cualquiera de los tipos enteros (int, largo, etc.) o decimales (que es solo un tipo entero con un factor de escala). Los flotantes y los dobles se convierten internamente en una representación exponencial en la base 2 y los números representados exactamente en una representación exponencial en la base 10 no se pueden representar en general con exactitud. (Por ejemplo, el número 10 solo está representado aproximadamente por flotantes o dobles).

Segundo, en términos de precisión, depende de lo que necesites. No estoy de acuerdo con su opinión de que nunca haya cálculos donde la precisión no importe. Normalmente tiene una necesidad específica de que su resultado final sea exacto, digamos, 3 dígitos. No tiene sentido buscar la mayor precisión posible si su entrada tiene una precisión limitada, digamos que pesa unos 5 g de harina y su escala solo tiene una precisión de 0.5 g. Dicho esto, el cálculo intermedio generalmente se beneficia de una mayor precisión, pero algo que es más importante que la alta precisión si con bastante frecuencia es la velocidad.

En tercer lugar, al realizar una serie de cálculos, por ejemplo, dentro de un bucle, debe saber qué está haciendo cuando se trata de cálculos inexactos: incurrirá en errores de redondeo y es posible que algunos algoritmos no lleguen a una respuesta con un grado de precisión . Comprender estos problemas en detalle puede requerir un curso de análisis numérico. Esto no depende de si elige flotas o dobles para sus cálculos.

Para los cálculos de punto flotante, generalmente voy con dobles, ya que son más generales y más rápidos que los flotadores. Sin embargo, los flotantes son más pequeños y si necesita almacenar muchos de ellos, son la opción para evitar problemas de rendimiento debido a errores de caché.

Que yo sepa, el procesamiento de punto flotante es compatible con hardware para dobles pero no flotantes, por lo que el uso de flotantes implica una conversión a doble. Sin embargo, algunas rutinas se detendrían antes cuando se calcula un valor iterativamente cuando pasas un flotante, ya que esto implica que solo quieres una precisión de alrededor de 8 dígitos contra alrededor de 16 para los dobles.


Use flotador para rendimiento y tamaño . Si puede administrar la pérdida de precisión.

Si bien es cierto que un procesador moderno requiere la misma cantidad de tiempo para procesar operaciones de precisión simple y doble, a veces puede obtener el doble de rendimiento si utiliza flotadores con instrucciones SIMD (MMX / SSE / etc. En x86).

Los registros SSE tienen 128 bits de ancho y pueden contener 4 flotantes o 2 dobles . Por lo tanto, si se usa correctamente, puede hacer el doble de operaciones con flotantes en comparación con los dobles.

La reducción de tamaño (4 bytes en lugar de 8) se vuelve importante cuando se trata de conjuntos de datos muy grandes (y la reducción de tamaño generalmente también mejora el rendimiento debido al almacenamiento en caché, etc.)


De hecho, hay una cosa en la que todavía es común usar flotadores también conocidos como "precisión simple" con 32 bits: aplicaciones gráficas e impresión.

La otra razón son las tarjetas gráficas con sus GPU. Cuanto menor es el tipo de datos, más rápida es la operación porque se deben transportar menos bits. Los tipos de datos enteros tienen problemas con las imágenes de alto rango dinámico: el ojo puede funcionar en un rango de luminosidad de 1: 10 ^ 13 y discierne ca. 4000 niveles. Entonces, aunque los tipos de datos enteros pueden almacenar el número de niveles, no pueden almacenar el brillo del fondo mientras que los flotantes no tienen problemas con eso. De hecho, IEEE 754R permite un nuevo flotador de "media precisión" con 16 bits y una mantisa de 10 bits que pierde algo de precisión pero que permite una velocidad aún mayor. OpenGL y DirectX p. Ej. Usan flotantes extensivamente. El ojo es muy indulgente con los artefactos, así que no hay problema allí.

Todos los demás medios que se basan en los gráficos heredan flotadores como medida conveniente. La mantisa tiene 24 bits permitiendo, por lo tanto, 2 ^ 24 = 16,7 millones de pasos consecutivos. Si tiene una impresora con resolución de 2000 ppp, aún puede imprimir hojas de 213x213 m. Más que suficiente precisión.