Escribo aplicaciones financieras en las que batalla constantemente la decisión de usar un doble frente a un decimal.decimal vs velocidad doble
Todas mis matemáticas funcionan en números con no más de 5 lugares decimales y no son más grandes que ~ 100,000. Tengo la sensación de que todos estos pueden representarse como dobles de todos modos sin error de redondeo, pero nunca he estado seguro.
Me gustaría seguir y pasar de decimales a dobles para la ventaja obvia de la velocidad, excepto que al final del día, todavía uso el método ToString para transmitir precios a los intercambios, y necesito asegurarme de que siempre saca el número que espero. (89.99 en lugar de 89,99000000001)
Preguntas:
- es la ventaja de velocidad realmente tan grande como pruebas sugieren ingenuos? (~ 100 veces)
- ¿Hay alguna manera de garantizar que la salida de ToString sea la que deseo? ¿Esto está asegurado por el hecho de que mi número siempre es representable?
ACTUALIZACIÓN: Tengo que procesar unos 10 mil millones de actualizaciones de precios antes de mi aplicación puede funcionar, y yo he implementado con decimales en este momento por las razones de protección evidentes, pero se necesita ~ 3 horas sólo para encender, dobles haría reducir drásticamente mi tiempo de activación. ¿Hay una manera segura de hacerlo con dobles?
Debido denominadores decimales son potencias de 10, y denominadores binarios son potencias de 2, incluso 1 lugar decimal no se puede representar sin error. Por ejemplo, 0.1 (una décima) no tiene equivalente exacto en binario, que es el mismo principio que un tercio que no tiene una representación exacta en decimal. –
¿Cuál es su cuello de botella? ¿Dónde estás grabando todos tus ciclos de CPU? Sin mediciones sólidas, hay un buen momento en el que se está mirando algo totalmente erróneo. –