"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يختلف حساب الفاصلة العائمة بين x86 وx64 في Visual Studio 2010؟

لماذا يختلف حساب الفاصلة العائمة بين x86 وx64 في Visual Studio 2010؟

تم النشر بتاريخ 2024-11-15
تصفح:584

Why does floating-point arithmetic differ between x86 and x64 in Visual Studio 2010?

التناقض الحسابي للنقطة العائمة بين x86 وx64

في Visual Studio 2010، هناك اختلاف ملحوظ في حساب الفاصلة العائمة بين بنيات x86 وx64 ينشأ عند مقارنة قيم تعبيرات معينة. يتجلى هذا التباين في الكود التالي:

float a = 50.0f;
float b = 65.0f;
float c = 1.3f;
float d = a * c;
bool bLarger1 = d 

تتعامل معماريتا x86 وx64 مع التعبير الثاني، bLarger2، بشكل مختلف. في الإصدار x86، يتم تقييم bLarger2 إلى true، بينما في الإصدار x64، يتم تقييمه إلى false. يعود سبب هذا التباين إلى حساب التعبير (a * c) في عمليات الفاصلة العائمة.

أصول التباين

يكمن جذر التناقض في الاختلاف وحدات الفاصلة العائمة التي تستخدمها المعمارتان: x87 لـ x86 وSSE لـ x64. والفرق الأساسي بين الوحدتين هو دقتهما. تستخدم وحدة x87 دقة أعلى من الدقة الفردية (عادةً الدقة المزدوجة) بشكل افتراضي، بينما تعمل وحدة SSE حصريًا بدقة واحدة.

معالجة التناقض

لحل المشكلة التناقض، يمكن تكوين دقة وحدة x87 يدويًا لتتناسب مع دقة وحدة SSE. يمكن تحقيق ذلك في كود 32 بت عن طريق تنفيذ ما يلي:

_controlfp(_PC_24, _MCW_PC);
_controlfp(_PC_24, _MCW_PC);
من خلال ضبط الدقة على دقة مفردة، يتم تقييم (a * c) في سيتم محاذاة تعبير bLarger2 مع تعبير الإصدار x64، مما يؤدي إلى تعيين كل من bLarger1 وbLarger2 على false.

الاستنتاج

ينبع الاختلاف في حساب الفاصلة العائمة بين تصميمات x86 وx64 من مستويات الدقة المميزة لوحدات الفاصلة العائمة x87 وSSE. من خلال التحكم يدويًا في دقة وحدة x87 لتتوافق مع دقة وحدة SSE، يمكن إزالة التناقض، مما يضمن تقييمًا متسقًا للتعبيرات عبر كلا البنيتين.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3