既定の設定ではDeviceクラスのインスタンス作成時に、CLRによってFPU (Floating-Point Unit) の演算が単精度に変更されます。これによりdouble型の演算もfloat型で行われるようになり、演算精度が低下します。
FPUの演算精度の設定は、アプリケーション全体に影響します。
これを回避するためには、デバイスを作成するときbehaviorFlags引数にFpuPreserveフラグを指定し、倍精度を使用するように指示します。
new Device(
0,
DeviceType.Hardware,
this,
CreateFlags.SoftwareVertexProcessing | CreateFlags.FpuPreserve,
presentParameters
);