我有一个用C#编写的程序,有些部分是用本机C / C ++编写的。 我使用双精度来计算某些值,有时由于精度太低而导致结果错误。经过一番调查后,我发现有人正在将浮点精度设置为24位。当我将精度重置为至少53位(使用_fpreset或_controlfp)时,我的代码工作正常,但我仍然需要确定谁负责将精度设置为24位。

我能做到这一点的任何想法吗?

有帮助吗?

解决方案

这是由默认的Direct3D设备初始化引起的。通过传递,可以告诉Direct3D不要弄乱FPU精度。 D3DCREATE_FPU_PRESERVE 标记为 CreateDevice 。还有一个与此标志等效的托管代码( CreateFlags.FpuPreserve )如果你需要它。

有关详细信息,请访问 Direct3D和FPU

其他提示

如果通过分区对程序进行二进制搜索并确定哪些调用会降低精度呢?

您的代码是否完全使用DirectX或XNA?我当然听说有问题 - 一些DirectX初始化代码(可能只在托管包装器中?)会降低精度。

scroll top