الفرق بين تعويم ومزدوج - أي واحد يجب أن أستخدم؟ الفرق بين

Anonim

(ملاحظة: يفترض أن القراء يعرفون أساسيات علوم الحاسب الآلي)

العديد من المبرمجين الجدد / الطلاب المسجلين في علوم الكمبيوتر يطرحون الأسئلة المتداولة ذات الصلة بالمجال المعين في علوم الكمبيوتر التي يدرسونها. تبدأ معظم دورات المبتدئين بموضوعات نظام الأرقام المستخدمة في أجهزة الكمبيوتر الحديثة، بما في ذلك ثنائي ، عشري ، ثماني و سداسي عشري < النظام. هذه هي تنسيقات أرقام الكمبيوتر التي تمثل تمثيلات داخلية للقيم الرقمية في أجهزة الكمبيوتر (أو الآلات الحاسبة وأي نوع آخر من أجهزة الكمبيوتر الرقمية). يتم تخزين هذه القيم ك "تجميع البتات". - 1>>

كما نعرف أجهزة الكمبيوتر تمثل البيانات في مجموعات من الأرقام الثنائية (أي في مزيج من

1s و 0s ، مثل 1111 تمثل 15 في النظام العشري)، فمن المنطقي أن نعلم عن تنسيقات الأرقام المختلفة التي تستخدم لتمثيل نطاق ديناميكي للقيم، لأنها تشكل الكتل الأساسية لعملية الحساب / العدد في أي نوع من العملية. وبمجرد أن يتم تعريف نظام الأرقام في الفصول الدراسية (غالبا ما تكون سيئة)، يميل الطلاب للانتقال إلى تنسيقات الأرقام المختلفة في نفس النوع (i.، الحساب العائم ) التي لها درجة دقة معينة وعدد. وهكذا، يضطرون إلى معرفة الفروق الدقيقة بين أنواع معينة. اثنين من أكثر أنواع البيانات شيوعا هي تعويم و مزدوج ، وبينما يستهدفون نفس الاحتياجات (أي الحساب العائم )، بعض الاختلاف في تمثيلها الداخلي والتأثير الكلي على الحساب في البرنامج. ومن المؤسف أن العديد من المبرمجين يغيب عن الفروق الدقيقة بين أنواع البيانات مسطحة ومزدوجة، وينتهي بهم سوء استخدام لهم في الأماكن التي لا ينبغي أن تستخدم في المقام الأول. مما أدى في نهاية المطاف إلى سوء التقدير في أجزاء أخرى من البرنامج.

في هذه المقالة، سأقول لك الفرق بين تعويم ومضاعفة مع أمثلة التعليمات البرمجية في لغة البرمجة C. هيا بنا نبدأ!

فلوت فس دوبل … ما هي الصفقة؟

تعويم ومزدوج هي تمثيل البيانات المستخدمة في العمليات الحسابية العائمة، فكر في الأرقام العشرية التي تحسبها في فئة الرياضيات، مثل

20. 123 ، 16. 23 ، 10. 2 ، وما إلى ذلك، فهي ليست أرقام كاملة (أي 2 ، 5 ، 15 ، إلخ) الكسور في ثنائي. ونتيجة للأرقام العشرية الناتجة (i. e، 20. 123 ، 16. 23 ، وما إلى ذلك.) لا يمكن تمثيلها بسهولة بتنسيق ثنائي عادي (i. e، إنتيجر). والفرق الرئيسي بين فلوت أند دوبل هو أن البيانات السابقة هي بيانات النقطة العائمة الدقيقة (32 بت)، في حين أن هذا الأخير هو نوع بيانات النقطة العائمة بدقة مزدوجة (64 بت). ويسمى ضعف "مزدوجة" لأنه في الأساس نسخة مزدوجة الدقة من تعويم. إذا كنت تقوم بحساب كمية كبيرة (التفكير في الآلاف من 0 في عدد)، ثم عدم الدقة سوف تكون أصغر في مزدوجة، وأنك لن تفقد الكثير من الدقة.

من الأفضل وضع أمثلة باستخدام الشفرة. ما يلي هو العملية على فلوت ومضاعفة من خلال وظائف الرياضيات المنصوص عليها في لغة C:

#include

إنت مين () {

فلوت نوم 1 = 1. f / 82؛

فلوت num2 = 0؛

ل (إنت i = 0؛ i <738؛ ++ i)

num2 + = num1؛

برينتف ("٪. 7g n"، num2)؛

مزدوج num3 = 1. 0/82؛

ضعف num4 = 0؛

ل (إنت i = 0؛ i <738؛ ++ i)

num4 + = num3؛

برينتف ("٪ 15g n"، نوم 4)؛

getchar ()؛

}

يطبع ما يلي:

9. 000031

8. 99999999999983

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

- 3>>

فيما يلي مثال على الدالة سرت () في C:

#include

#include

إنت مين () {

فلوت num1 = سرت (2382719676512365. 1230112312312312)؛

مزدوج num2 = سرت (2382719676512365. 1230112312312312)؛

برينتف ("٪ f n"، num1)؛

برينتف ("٪ f n"، num2)؛

getchar ()؛

}

يعطي الإخراج التالي:

48813108. 000000

48813109. 678778

هنا، يمكنك أن ترى أن الجواب في مزدوجة لديه دقة أفضل.

الكل في الكل، فمن الأفضل استخدام مزدوجة لحساب العائمة نقطة، والعديد من وظائف الرياضيات القياسية في C تعمل على أجهزة الكمبيوتر مزدوجة وحديثة هي سريعة للغاية وفعالة لحسابات مزدوجة العائمة نقطة. وهذا يؤدي إلى الحد من الحاجة إلى استخدام تعويم، إلا إذا كنت بحاجة إلى العمل على الكثير من أرقام العائمة (التفكير في صفائف كبيرة مع الآلاف من 0 في الأرقام) أو كنت تعمل على نظام لا يدعم المزدوج- نقطة العائمة الدقة، والعديد من وحدات معالجة الرسومات، وأجهزة تعمل بالطاقة المنخفضة ومنصات معينة (أرم اللحاء- M2، اللحاء- M4، وما إلى ذلك) لا تدعم ضعف بعد، ثم يجب عليك استخدام تعويم. بالإضافة إلى ذلك، شيء واحد أن نتذكر هو أن بعض وحدات معالجة الرسومات / وحدات المعالجة المركزية تعمل بشكل أفضل / كفاءة في معالجة تعويم، كما هو الحال في حساب ناقلات / مصفوفة، لذلك قد تحتاج إلى النظر في دليل مواصفات الأجهزة / وثائق لاتخاذ قرار أفضل أي واحد يجب عليك استخدام لآلة معينة.

نادرا ما يكون هناك سبب لاستخدام فلوت بدلا من دوبل في التعليمات البرمجية التي تستهدف أجهزة الكمبيوتر الحديثة. الدقة الإضافية في ضعف يقلل، ولكن لا يلغي، فرصة أخطاء التقريب أو عدم الدقة الأخرى التي يمكن أن تسبب مشاكل في أجزاء أخرى من البرنامج. العديد من وظائف الرياضيات أو مشغلي تحويل وعودة مزدوجة، لذلك لا تحتاج إلى إرسال الأرقام مرة أخرى إلى تعويم، لأن ذلك قد تفقد الدقة.للحصول على تحليل مفصل عن الحساب العائم نقطة، وأنا أوصي لك أن تقرأ هذه المادة رهيبة (هتب: // مستندات أوراكل. كوم / سد / E19957-01 / 806-3568 / ncg_goldberg. أتش تي أم أل).

ملخص

لذلك … باختصار:

الأماكن التي يجب أن تستخدم فيها تعويم:

إذا كنت تستهدف الأجهزة حيث دقة واحدة أسرع من الدقة المزدوجة.

  • التطبيق الخاص بك يجعل الاستخدام الكثيف من العائمة الحساب الحسابي، مثل الآلاف من الأرقام مع الآلاف من 0.
  • تقوم بتحسين مستوى منخفض جدا. على سبيل المثال، كنت تستخدم تعليمات وحدة المعالجة المركزية الخاصة (i.، سس، SSE2، أفكس، الخ) التي تعمل على عدة أرقام / صفائف / ناقلات في وقت واحد.
الاستنتاج

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