3

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

有什么想法我可以做到这一点吗?

4

3 回答 3

13

这是由默认的 Direct3D 设备初始化引起的。您可以通过将D3DCREATE_FPU_PRESERVE标志传递给CreateDevice. CreateFlags.FpuPreserve如果需要,还有一个与此标志 ( ) 等效的托管代码。

更多信息可以在Direct3D 和 FPU中找到。

于 2009-07-30T07:13:10.083 回答
1

在程序中按分区进行二分搜索并确定哪些调用会降低精度呢?

于 2009-07-29T15:25:06.320 回答
0

您的代码使用的是 DirectX 还是 XNA?我当然听说过因此存在问题 - 一些 DirectX 初始化代码(可能仅在托管包装器中?)降低了精度。

于 2009-07-29T15:22:44.500 回答