Domanda

Ho un programma scritto in C # e alcune parti stanno scrivendo in C / C ++ nativo. Uso i doppi per calcolare alcuni valori e talvolta il risultato è sbagliato a causa della precisione troppo piccola. Dopo alcune indagini ho capito che qualcuno sta impostando la precisione in virgola mobile su 24 bit. Il mio codice funziona bene, quando ripristino la precisione su almeno 53 bit (usando _fpreset o _controlfp), ma devo ancora capire chi è responsabile dell'impostazione della precisione su 24 bit in primo luogo.

Qualche idea su chi avrei potuto raggiungere questo obiettivo?

È stato utile?

Soluzione

Ciò è causato dall'inizializzazione predefinita del dispositivo Direct3D. Puoi dire a Direct3D di non pasticciare con la precisione FPU passando il D3DCREATE_FPU_PRESERVE contrassegna su CreateDevice . Esiste anche un codice gestito equivalente a questo flag ( CreateFlags.FpuPreserve ) se ne hai bisogno.

Ulteriori informazioni sono disponibili all'indirizzo Direct3D e FPU .

Altri suggerimenti

Che dire di una ricerca binaria per partizioni nel tuo programma e di determinare quali chiamate riducono la precisione?

Il tuo codice utilizza DirectX o XNA? Ho sicuramente sentito che ci sono problemi a causa di ciò - alcuni codici di inizializzazione DirectX (forse solo nel wrapper gestito?) Riducono la precisione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top