Question

J'ai un programme écrit en C # et certaines parties sont écrites en C / C ++ natif. J'utilise des doubles pour calculer certaines valeurs et parfois le résultat est faux en raison d'une précision trop faible. Après quelques recherches, j'ai découvert que quelqu'un réglait la précision de la virgule flottante sur 24 bits. Mon code fonctionne bien lorsque je redéfinis la précision à au moins 53 bits (avec _fpreset ou _controlfp), mais je dois toujours déterminer qui est responsable de la définition de la précision à 24 bits.

Avez-vous des idées pour y arriver?

Était-ce utile?

La solution

Ceci est dû à l'initialisation par défaut du périphérique Direct3D. Vous pouvez dire à Direct3D de ne pas toucher à la précision de la FPU en transmettant le D3DCREATE_FPU_PRESERVE pour CreateDevice . Il existe également un code géré équivalent à cet indicateur ( CreateFlags.FpuPreserve ) si vous en avez besoin.

Pour plus d'informations, consultez la page Direct3D et la FPU .

Autres conseils

Qu'en est-il d'une recherche binaire par partitions dans votre programme et déterminer quels appels réduisent la précision?

Votre code utilise-t-il DirectX ou XNA? J'ai certainement entendu dire que cela posait des problèmes: certains codes d'initialisation de DirectX (éventuellement uniquement dans l'encapsuleur géré?) Réduisaient la précision.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top