البرمجة

تحسين دقة طباعة الأعداد العشرية في لغة C

في هذا السياق، يظهر أنك تبحث عن كيفية استخدام دالة printf في لغة البرمجة C لطباعة الأرقام العشرية الحقيقية (float) بدقة. يتعلق هذا بقضية دقة التمثيل العددية للأعداد العشرية الثنائية في الحاسوب. سأقدم لك شرحاً تفصيلياً حول هذا الموضوع.

في بيئة البرمجة، يتم تمثيل الأعداد العشرية باستخدام النظام الثنائي (binary floating-point). عند استخدام printf لطباعة الأعداد العشرية، يتم تقريب القيمة الفعلية للعدد الثنائي. هذا يمكن أن يؤدي إلى فقدان الدقة في بعض الحالات، مما يؤدي إلى ظهور أخطاء تقريب.

لتحسين دقة الطباعة، يمكنك استخدام المحدد الدقيق “%lf” بدلاً من “%f”. يعتبر “%lf” توسيعًا لـ double، وهو نوع أكبر من float ويوفر دقة أكبر. لذلك، يمكنك تعديل الشيفرة كما يلي:

c
#include int main(int argc, char **argv) { printf("%lf\n", 1.233239208938208); printf("%lf\n", 1.23); return 0; }

باستخدام “%lf”، يمكنك الحصول على نتائج ذات دقة أعلى. يجب أن يعين ذلك الشفرة الناتج المتوقع:

1.233239 1.230000

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

المزيد من المعلومات

إن فهم دقة الأعداد العشرية في لغة البرمجة C يعتمد بشكل أساسي على فهم نظام التمثيل الثنائي وكيفية يتم تخزين الأعداد العشرية في الحاسوب. يتم تخزين الأعداد العشرية باستخدام معيار IEEE-754 في معظم الحواسيب الحديثة، وهو معيار يحدد كيفية تمثيل الأعداد العشرية في صورة ثنائية.

لفهم المزيد، يمكن أن نلقي نظرة على نطاقات التمثيل للـ float و double في C:

  • float: يستخدم حوالي 32 بت لتمثيل القيم العشرية، مع 23 بت للجزء العشري و8 بت للسمية.
  • double: يستخدم حوالي 64 بت لتمثيل القيم العشرية، مع 52 بت للجزء العشري و11 بت للسمية.

عند استخدام printf للطباعة، يجب أن تكون على دراية بأن الطريقة التي يتم بها تقريب القيم يمكن أن تؤثر على الدقة. في الشفرة المذكورة، يتم تقريب قيمة 1.23 إلى 1.230000. هذا يعكس الشكل القياسي الذي يتم فيه طباعة الأعداد العشرية في C.

للحصول على دقة أكبر، يمكنك استخدام المكتبة الرياضية في C للتحكم في تنسيق الطباعة. مثلاً، يمكنك استخدام دالة printf مع %.15lf للحصول على 15 رقماً بعد الفاصلة العشرية:

c
#include int main(int argc, char **argv) { printf("%.15lf\n", 1.233239208938208); printf("%.15lf\n", 1.23); return 0; }

هذا يمكن أن يؤدي إلى طباعة نتائج أكثر دقة:

1.233239208938208 1.230000000000000

هذا يعتمد أيضاً على دقة التمثيل في النظام الذي تستخدمه، ويمكن أن يختلف من نظام إلى آخر.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

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