سؤال

لدي برنامج مكتوب في C# وبعض الأجزاء تكتب في C/C ++ الأصلي. أستخدم الزوجي لحساب بعض القيم وأحيانًا تكون النتيجة خاطئة بسبب دقة صغيرة جدًا. بعد بعض التحقيقات ، اكتشفت أن شخصًا ما يقوم بتعيين دقة الفاصلة العائمة إلى 24 بت. يعمل الكود الخاص بي بشكل جيد ، عندما أقوم بإعادة ضبط الدقة إلى 53 بت على الأقل (باستخدام _fpreset أو _controlfp) ، لكنني ما زلت بحاجة إلى معرفة من المسؤول عن تحديد الدقة إلى 24 بت في المقام الأول.

أي أفكار يمكنني تحقيق هذا؟

هل كانت مفيدة؟

المحلول

يحدث هذا بسبب تهيئة جهاز Direct3D الافتراضية. يمكنك إخبار Direct3D بعدم العبث بدقة FPU عن طريق تمرير D3DCREATE_FPU_PRESERVE العلم إلى CreateDevice. هناك أيضًا رمز مُدارة يعادل هذا العلم (CreateFlags.FpuPreserve) إذا إحتجت إلى ذلك.

يمكن العثور على مزيد من المعلومات في Direct3D و FPU.

نصائح أخرى

ماذا عن البحث الثنائي حسب الأقسام في برنامجك وتحديد المكالمات التي تقلل من الدقة؟

هل الكود الخاص بك باستخدام DirectX أو XNA على الإطلاق؟ لقد سمعت بالتأكيد أن هناك مشاكل بسبب ذلك - بعض رمز تهيئة DirectX (ربما فقط في الغلاف المدارة؟) يقلل من الدقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top