secante resueltos raphson punto paso online numericos numerico newton metodos metodo fijo ejercicios analisis algoritmo c++ performance math fixed-point

resueltos - ¿Qué usas para la representación del punto fijo en C++?



metodo de punto fijo online (7)

Estoy buscando un estándar de punto fijo para usar en datos financieros, ¿conoce alguno que valga la pena intentar? ¿Tienes alguna experiencia sobre el rendimiento de las clases de punto fijo hechas a mano?


Ay. Los sistemas financieros son complicados, su problema principal no es matemática de punto fijo, el problema son los errores de redondeo.

Puede tener una buena hoja de cálculo llena de cálculos desagradables con descuentos por tipo de cliente e IVA incluido. Haces un total, lo presentas a un contador y él dice que los valores son todos incorrectos. El motivo: la salida puede formatearse con solo dos decimales, pero internamente el valor tiene todos los decimales de un flotante o doble. y ellos suman

Necesita conocer sus finanzas y decidir dónde estarán los valores base. Es decir, qué valores son los que los contadores verificarán (sí, requiere conocimiento del negocio, la parte ''complicada'').

Antes de guardar el valor en una forma persistente (base de datos, archivo, memoria ...) trunca los decimales adicionales que las multiplicaciones y divisiones pueden haber agregado.

Solución rápida y sucia para N lugares decimales: ((doble) ((int) (Valor * N * 10.0))) / 10.0

Por supuesto, necesita verificar exactamente qué tipo de redondeo requieren sus finanzas.


Dr.Dobb tiene un artículo sobre una posible implementación de tipo de aritmética de punto fijo en C ++. Mira esto .




Un tipo int de 64 bits debería ser suficiente para representar todos los valores financieros en centavos.

Solo debe tener cuidado de redondear los porcentajes correctamente, para obtener una definición de correcta .


Intentando responder directamente

Markus Trenkwalder tiene uno que admite algunas funciones matemáticas: http://www.trenki.net/content/view/17/1/ :

La biblioteca consta de varias funciones para tratar con números de puntos fijos (multiplicación, división, inversión, sin, cos, sqrt, rsqrt). También contiene una clase contenedora C ++ que se puede utilizar para simplificar el trabajo con números de puntos fijos en gran medida. Utilicé esta clase de número de punto fijo junto con mi biblioteca vector_math para obtener una biblioteca matemática de vector de punto fijo. Al hacerlo, los cálculos en 3D fueron mucho más rápidos en comparación con la versión de coma flotante.

El autor se propuso decir que su plataforma no es compatible con punto flotante, es por eso que lo hizo. Además, tenga en cuenta que es para renderización 3D, la pregunta fue para datos financieros y queremos una buena biblioteca de funciones matemáticas.

Especificación aritmética de coma flotante decimal IEEE 754-2008, dirigida a aplicaciones financieras

Esto parece una forma establecida de manejar datos financieros con buen soporte (de Intel e IEEE) - http://software.intel.com/en-us/articles/intel-decimal-floating-point-math-library

Citar:

IEEE 754-2008 Especificación aritmética de coma flotante decimal, dirigida a aplicaciones financieras, especialmente en casos donde los requisitos legales hacen necesario el uso de aritmética decimal y no binaria en coma flotante (ya que el cálculo realizado con operaciones de coma flotante binarias puede introducir pequeñas, pero errores inaceptables).

Sin embargo, NO es un punto fijo, pero creo que es bastante útil para las personas que buscan una respuesta a esta pregunta.


Uso mi clase de matemática de punto fijo. Está diseñado para ser más o menos una gota en reemplazo de flotadores / dobles. http://codef00.com/coding

EDITAR : Como nota al margen, personalmente no usaría una clase de punto fijo para este propósito. En su lugar, simplemente almacena la cantidad de centavos (o décimas de centavo o centésimas de centavo según sea necesario). Simplemente haz las matemáticas directamente con eso. Luego escalaré el valor de manera apropiada cuando se muestre a los usuarios.