دقة النقطة العائمة في لغة 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