write optimized moz img images how for example alternative optimization floating-point performance numerical fixed-point

optimization - optimized - Cuándo usar el Punto fijo en estos días



how to write alt text (7)

Aún así vale la pena. El punto flotante es más rápido que en el pasado, pero el punto fijo también lo es. Y fijo sigue siendo el único camino a seguir si le importa la precisión más allá de lo garantizado por IEEE 754.

Para un gran número de crujidos estoy considerando usar un punto fijo en lugar de un punto flotante. Por supuesto, importará cuántos bytes tiene el tamaño del tipo de punto fijo, en qué CPU se ejecutará, si puedo usar (para Intel) el MMX o SSE o cualquier cosa nueva que surja ...

Me pregunto si estos días, cuando el punto flotante se ejecuta más rápido que nunca, ¿vale la pena considerar un punto fijo? ¿Hay reglas generales en las que podamos decir que importará en más de un pequeño porcentaje? ¿Cuál es la descripción desde 35,000 pies de desempeño numérico? (Por cierto, supongo que se encuentra una CPU general en la mayoría de las computadoras, no en DSP ni en sistemas integrados especializados).


Dado que está utilizando una CPU de propósito general, le sugiero que no utilice el punto fijo, a menos que el rendimiento sea tan crítico para su aplicación que tenga que contar cada tic. La molestia de implementar un punto fijo y lidiar con problemas como el desbordamiento simplemente no lo vale, cuando tienes una CPU, que lo hará por ti.

En mi humilde opinión, el punto fijo solo es necesario cuando está utilizando un DSP sin soporte de hardware para operaciones de coma flotante.


Es casi SIEMPRE más rápido de usar punto fijo (experiencia de x86, pentium, 68k y ARM). Sin embargo, también puede depender del tipo de aplicación. Para la programación de gráficos (uno de mis principales usos del punto fijo) he podido optimizar el código utilizando tablas de coseno preconstruidas, tablas de registro, etc. Pero también las operaciones matemáticas básicas también han demostrado ser más rápidas.

Un comentario sobre software financiero. Se dijo en una respuesta anterior que el punto fijo es útil para los cálculos financieros. En mi propia experiencia (desarrollo de un gran sistema de gestión de tesorería y una amplia experiencia en el procesamiento de tarjetas de crédito) NO usaría el punto fijo. Tendrá errores de redondeo usando punto flotante o fijo. Siempre utilizamos montos enteros para representar montos monetarios, contando la cantidad mínima posible (1c por euro o dólar). Esto asegura que no se pierdan cantidades parciales. Al hacer cálculos complejos, los valores se convierten en dobles, se aplican reglas de redondeo específicas de la aplicación y los resultados se convierten a números enteros.


Use punto fijo cuando el hardware no sea compatible con punto flotante o la implementación de hardware sea una mierda.

También ten cuidado cuando hagas clases para ello. Algo que piensas que sería rápido podría llegar a ser un perro cuando se trata de crear perfiles debido a copias (no) necesarias de las clases. Esa es otra pregunta para otro momento sin embargo.


En situaciones en las que se manejan grandes cantidades de datos, el punto fijo puede ser el doble de eficiente en la memoria, por ejemplo, un entero de cuatro bytes en lugar de un doble de ocho bytes. Una técnica utilizada a menudo en grandes conjuntos de datos geoespaciales es reducir todos los datos a un origen común, de modo que los bits más significativos puedan eliminarse y trabajar con enteros de punto fijo para el resto. El punto flotante solo es importante si el punto realmente flota, es decir, si se trata de un rango muy amplio de números con una precisión muy alta.


Otra buena razón para usar un decimal fijo es que el redondeo es mucho más simple y predecible. La mayor parte del software financiero utiliza decimales de precisión arbitraria de punto fijo con redondeo a la mitad o incluso para representar el dinero.


Otra razón para utilizar el punto fijo es que ARM dispositivos ARM , como los teléfonos móviles y las tabletas, carecen de FPU (al menos muchos de ellos).

Para desarrollar aplicaciones en tiempo real, tiene sentido optimizar las funciones usando aritmética de punto fijo. Existen implementaciones de FFT (transformada rápida de Fourier), muy importantes para los gráficos, que basan sus mejoras en la eficiencia al depender de la aritmética de coma flotante.