我有一个用C#编写的程序,有些部分是用原生C/C++编写的。我使用双精度来计算一些值,有时结果会因为精度太小而出错。经过一番调查,我发现有人将浮点精度设置为24位。当我将精度重置为至少53位时,我的代码工作正常(使用_fpreset或_controlfp),但我仍然需要弄清楚谁首先负责将精度设置为24位。你知道谁能做到吗?
euoag5mw1#
这是由默认的Direct3D设备初始化引起的。您可以通过将D3DCREATE_FPU_PRESERVE标志传递给CreateDevice来告诉Direct3D不要影响FPU精度。如果需要,还有一个与此标志(CreateFlags.FpuPreserve)等效的托管代码。更多信息请访问Direct3D and the FPU。
D3DCREATE_FPU_PRESERVE
CreateDevice
CreateFlags.FpuPreserve
qjp7pelc2#
通过程序分区进行二进制搜索并确定哪些调用会降低精度,这又如何呢?
jslywgbw3#
您的代码使用DirectX或XNA吗?我肯定听说过这会导致一些问题-一些DirectX初始化代码(可能只在托管 Package 器中?)降低了精度。
3条答案
按热度按时间euoag5mw1#
这是由默认的Direct3D设备初始化引起的。您可以通过将
D3DCREATE_FPU_PRESERVE
标志传递给CreateDevice
来告诉Direct3D不要影响FPU精度。如果需要,还有一个与此标志(CreateFlags.FpuPreserve
)等效的托管代码。更多信息请访问Direct3D and the FPU。
qjp7pelc2#
通过程序分区进行二进制搜索并确定哪些调用会降低精度,这又如何呢?
jslywgbw3#
您的代码使用DirectX或XNA吗?我肯定听说过这会导致一些问题-一些DirectX初始化代码(可能只在托管 Package 器中?)降低了精度。