Frage

Ich habe ein in C# geschriebenes Programm und einige Teile schreiben in nativem C/C ++. Ich verwende Doppel, um einige Werte zu berechnen, und manchmal ist das Ergebnis aufgrund einer zu geringen Präzision falsch. Nach einigen Untersuchungen habe ich herausgefunden, dass jemand die Gleitkomma-Präzision auf 24-Bit setzt. Mein Code funktioniert einwandfrei, wenn ich die Genauigkeit auf mindestens 53 Bits zurücksetze (mit _fpreset oder _controlfp), aber ich muss noch herausfinden, wer für die Festlegung der Genauigkeit auf 24-Bits in erster Linie verantwortlich ist.

Irgendwelche Ideen, die ich das erreichen könnte?

War es hilfreich?

Lösung

Dies wird durch die standardmäßige Direct3D -Geräte -Initialisierung verursacht. Sie können Direct3d erkennen, dass sie sich nicht mit der FPU -Präzision anlegen soll, indem Sie das übergeben D3DCREATE_FPU_PRESERVE Flagge an CreateDevice. Es gibt auch einen verwalteten Code, der dieser Flagge entspricht (CreateFlags.FpuPreserve) wenn du es brauchst.

Weitere Informationen finden Sie unter Direct3d und die FPU.

Andere Tipps

Was ist mit einer binären Suche nach Partitionen in Ihr Programm und festzustellen, welche Aufrufe die Präzision verringern?

Verwendet Ihr Code überhaupt DirectX oder XNA? Ich habe sicherlich gehört, dass es Probleme gibt - ein DirectX -Initialisierungscode (möglicherweise nur im verwalteten Wrapper?) Verringert die Präzision.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top