Pregunta

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

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

¿Fue útil?

Solución

Todavía vale la pena. El punto flotante es más rápido que en el pasado, pero el punto fijo también lo es. Y lo fijo es la única manera de continuar si le importa la precisión más allá de la garantizada por IEEE 754.

Otros consejos

En situaciones en las que se trata de grandes cantidades de datos, el punto fijo puede ser dos veces más eficiente en memoria, por ejemplo. un entero de cuatro bytes de largo en lugar de un doble de ocho bytes. Una técnica que se usa 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 se puedan eliminar y trabajar con enteros de punto fijo para el resto. El punto flotante solo es importante si el punto realmente flota, es decir, se trata de un rango muy amplio de números con una precisión muy alta.

Otra buena razón para usar el 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 medias para representar el dinero.

Es casi SIEMPRE más rápido de usar el 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 precreadas, tablas de registro, etc. Pero también las operaciones matemáticas básicas 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 un punto fijo. Tendrá errores de redondeo con el punto flotante o fijo. Siempre utilizamos montos enteros para representar montos monetarios, contando el monto mínimo posible (1c por euro o dólar). Esto asegura que nunca se pierdan cantidades parciales. Cuando se realizan cálculos complejos, los valores se convierten a dobles, se aplican reglas de redondeo específicas de la aplicación y los resultados se vuelven a convertir en números enteros.

Use el punto fijo cuando el hardware no admite el punto flotante o la implementación del hardware apesta.

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

Otra razón para usar puntos fijos es que los dispositivos ARM , como teléfonos móviles y tabletas, carecen de FPU (al menos muchos de ellos).

Para desarrollar aplicaciones en tiempo real, tiene sentido optimizar las funciones utilizando aritmética de punto fijo. Existen implementaciones de FFT (Fast Fourier Transform), muy importantes para gráficos, que basan sus mejoras en la eficiencia y se basan en la aritmética de punto flotante.

Ya que está utilizando una CPU de propósito general, sugeriría no usar un 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 tratar problemas como el desbordamiento simplemente no vale la pena, cuando tiene una CPU, que lo hará por usted.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top