2012-09-23 75 views
7

Estoy trabajando en una nueva versión de mi Mandelbrot screensaver y me estoy quedando sin precisión de punto flotante - double simples valores no tienen suficientes cifras significativas para mis necesidades.Cualquier equivalente de "extendido" para C#?

Más cifras significativas = mayores niveles de zoom en el fractal de

Volver cuando escribí una versión de este protector de pantalla en Delphi 7, I utilizan el tipo extended punto flotante, 80 bits de tamaño.

En .NET, podría cambiar a decimal, pero el rendimiento logrado es terrible, reduciendo la generación de fractal en un factor de 20 o menos.

¿Hay algún equivalente de extendido para .NET? O, alternativamente, ¿hay algún tipo numérico con una mayor precisión que doble que todavía usan el coprocesador para la evaluación y por lo tanto no tienen el éxito de alto rendimiento de decimal?

actualización

Mi protector de pantalla ya se las arregla para hacer zoom en el fractal por muchos (muchos!) Órdenes de magnitud; actualmente se restablece al fractal base solo cuando el tipo numérico en uso no puede separar las ordenadas para píxeles adyacentes. Los 16 bits extra de precisión de la mejora doblemente extendida me darían cerca de 16 duplicaciones más de tamaño.

En cuanto a rendimiento, mi algoritmo ya logra eliminar el 95-99% de las matemáticas requeridas (en comparación con una implementación ingenua que calcula muchos píxeles), conservando la integridad del fractal.

+0

Probablemente necesite escribir código nativo para esto, ya que el extendido hace uso del registro de coma flotante de 80 bits en x86. O no estoy seguro de si es posible reducir el hambre del programa para obtener más precisión. No soy experto en esto, así que no puedo dar ningún consejo adicional. – nhahtdh

Respuesta

4

En las plataformas de 64 bits, el tipo Extended es un alias de doble, que es sólo 8 bytes. En plataformas de 32 bits, un número Extended se representa como 10 bytes (80 bits).

Eso significa que incluso su programa Delphi puede no funcionar bien en plataformas de 64 bits.

Si necesita un tipo de datos numéricos con más de 64 bits, vaya a decimal y optimice sus algoritmos para mejorar el rendimiento.

+0

De acuerdo. No creo que necesites más precisión absoluta para calcular renders Mandlebrot de alta resolución (probado por el hecho de que hay muchos programas que se acercan infinitamente a velocidades muy rápidas). Creo que OP necesita pensar en resolver el problema de manera diferente. – Dai