3

我最近在我的程序中添加了一些 DirectX 代码,现在我的双精度数据类型变量只有浮点数的范围/分辨率(.. 或至少比以前更小的范围/分辨率)。如果我删除 direct3D 初始化 - “Direct3DCreate9(D3D_SDK_VERSION)” - 问题就消失了。有什么见解吗?谢谢。

4

2 回答 2

7

Direct3D 将修改 FPU 状态以强制单精度模式。

如果要保留双精度模式,D3DCREATE_FPU_PRESERVE请在创建 D3D 设备时使用。这将对 D3D 的性能产生影响:

http://msdn.microsoft.com/en-us/library/bb172527(VS.85).aspx

于 2009-02-18T00:07:29.507 回答
1

正如这篇博文所述:Direct3D and the FPU,您可以告诉 Direct3D 不要将 FPU 模式更改为单精度:

幸运的是,您可以通过简单地告诉 Direct3D 根本不要弄乱 FPU 来避免所有这些。创建设备时,您应该使用 CreateFlags.FpuPreserve 标志来保持 CLR 的双精度,并使您的代码按预期运行。

于 2009-02-18T00:11:26.003 回答