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

كيفية ضمان دقة النقطة العائمة في لغة C++؟

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

How to Ensure Accurate Floating-Point Precision in C  ?

دقة النقطة العائمة في لغة C

عند التعامل مع أرقام الفاصلة العائمة في لغة C، من الضروري فهم حدود الدقة الخاصة بها. خذ بعين الاعتبار الكود التالي:

double a = 0.3;
std::cout.precision(20);
std::cout 

النتيجة هي 0.299999999999999889 بدلاً من 0.3، مما يشير إلى فقدان الدقة. لمعالجة هذه المشكلة، توفر لغة C الثابت std::numeric_limits::digits10، حيث T هو نوع رقم الفاصلة العائمة. يمثل هذا الثابت الحد الأقصى لعدد الأرقام المهمة التي يمكن تمثيلها بدقة.

إليك كيفية استخدام std::numeric_limits::digits10 لتعيين الدقة بشكل صحيح:

#include 
#include 
int main()
{
        double a = 0.3;
        std::cout.precision(std::numeric_limits::digits10);
        std::cout ::digits10);
        std::cout 

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

ومع ذلك، من المهم ملاحظة أنه حتى مع هذا النهج، قد تحدث أخطاء متراكمة إذا تكررت الحلقة بشكل ملحوظ أكثر من 50 مرة. وذلك لأن أرقام الفاصلة العائمة هي أرقام تقريبية، ويمكن أن تتراكم الأخطاء عبر سلسلة من العمليات. للتعامل مع مثل هذه المواقف، يوصى باستخدام المكتبات التي توفر عمليات حسابية ذات دقة اعتباطية، مثل Boost.Multiprecision.

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

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

Copyright© 2022 湘ICP备2022001581号-3