"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > هل الضرب المزدوج مكسور في .NET؟

هل الضرب المزدوج مكسور في .NET؟

نشر في 2025-02-06
تصفح:771

Is Double Multiplication Broken in .NET?

شرح مفصل لمشكلة دقة الضرب الدقة المزدوجة في .NET

في C#، نتيجة التعبير Double I = 10 * 0.69 ؛ هو أن I تم تعيين قيمة 6.89999999999999999999999999999995 ، بدلاً من 6.9. هذا يثير السؤال: هل هناك خطأ في الضرب الدقة المزدوجة في .NET؟

تمثيل ثنائي وعملية نقطة عائمة

]

لفهم هذا السلوك ، يجب أن يكون لديك فهم عميق للتفاصيل الدقيقة للتمثيلات الثنائية وعمليات النقطة العائمة. تمثل تنسيقات النقاط العائمة تقريبًا أرقامًا حقيقية كقيم ثنائية محدودة ، والتي يمكن أن تؤدي إلى قيود دقيقة.

لا يمكن تمثيل 0.69 البسيط على ما يبدو بدقة في ثنائي. يتطلب حلقة لا حصر لها من الأرقام الثنائية. التمثيل الثنائي المخزن في نوع البيانات مزدوج هو قيمة تقريبية قدرها 0.69.

ثوابت محسّنة وتخزينها بواسطة برنامج التحويل البرمجي

]

في مقتطف الكود المقدم ، يعمل المترجم على تحسين التعبير عن طريق إجراء الضرب وتخزين النتيجة كثابت في القابل للتنفيذ. يفعل هذا لأن هذه القيم معروفة في وقت الترجمة. القيمة المخزنة هي تقريب نقطة عائمة قدرها 6.9 ، وهو أصغر قليلاً من القيمة الفعلية.

حلول وأنواع البيانات البديلة

]

لحل هذه المشكلة والحصول على نتائج أكثر دقة ، يمكن استخدام نوع البيانات إن التعبير العشري i = 10m * 0.69m ؛ سينتج عن 6.9m.

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

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

Copyright© 2022 湘ICP备2022001581号-3