浮点精度

时间:2009-07-29 15:20:06

标签: c# c++ math floating-point double

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

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

3 个答案:

答案 0 :(得分:13)

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

可以在Direct3D and the FPU找到更多信息。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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