Pregunta

Tengo un programa escrito en C # y algunas partes están escribiendo en C / C ++ nativo. Utilizo los dobles para calcular algunos valores y, a veces, el resultado es incorrecto debido a una precisión demasiado pequeña. Después de algunas investigaciones, descubrí que alguien está configurando la precisión de punto flotante en 24 bits. Mi código funciona bien, cuando restablezco la precisión a al menos 53 bits (usando _fpreset o _controlfp), pero aún tengo que averiguar quién es el responsable de establecer la precisión en 24 bits en primer lugar.

¿Alguna idea de quién podría lograr esto?

¿Fue útil?

Solución

Esto es causado por la inicialización predeterminada del dispositivo Direct3D. Puede decirle a Direct3D que no se meta con la precisión de la FPU pasando el El indicador D3DCREATE_FPU_PRESERVE para CreateDevice . También hay un código administrado equivalente a este indicador ( CreateFlags.FpuPreserve ) si lo necesita.

Puede encontrar más información en Direct3D y la FPU .

Otros consejos

¿Qué pasa con una búsqueda binaria por particiones en su programa y determinar qué llamadas reducen la precisión?

¿Está su código usando DirectX o XNA? Ciertamente he escuchado que hay problemas debido a eso: algunos códigos de inicialización de DirectX (¿posiblemente solo en el contenedor administrado?) Reducen la precisión.

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