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