JavaRush /مدونة جافا /Random-AR /ماذا يوجد داخل رقم الفاصلة العائمة وكيف يعمل؟
Ivan
مستوى
Харьков

ماذا يوجد داخل رقم الفاصلة العائمة وكيف يعمل؟

نشرت في المجموعة

محتوى:

الصورة: http://pikabu.ru/

مقدمة

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

رحلة إلى التاريخ

( مأخوذ من هذا المقال عن حبري ) في الستينيات والسبعينيات، عندما كانت أجهزة الكمبيوتر كبيرة وكانت البرامج صغيرة، لم يكن هناك معيار واحد للحسابات، بالإضافة إلى معيار للتعبير عن رقم الفاصلة العائمة نفسه. كل جهاز كمبيوتر قام بذلك بشكل مختلف، ولكل منها أخطائه الخاصة. لكن في منتصف السبعينيات، قررت شركة إنتل صنع معالجات جديدة ذات حسابات حسابية "محسنة" مدعومة وفي نفس الوقت توحيدها. تم جلب الأستاذين ويليام كاهان وجون بالمر (لا، ليس مؤلفي كتب عن البيرة) لتطويره. كان هناك بعض الدراما، ولكن تم تطوير معيار جديد. الآن يسمى هذا المعيار IEEE754

تنسيق رقم النقطة العائمة

حتى في الكتب المدرسية، واجه الجميع طريقة غير عادية لكتابة أعداد كبيرة جدًا أو صغيرة جدًا على شكل 1.2 × 10 3 أو 1.2 E3 ، والتي تساوي 1.2 × 1000 = 1200 . وهذا ما يسمى طريقة التدوين الأسي. في هذه الحالة، نحن نتعامل مع التعبير عن رقم باستخدام الصيغة: N=M×n p ، حيث
  • ن = 1200 - الرقم الناتج
  • م = 1,2 - الجزء العشري - جزء كسري، دون مراعاة الأوامر
  • ن = 10 هو أساس النظام. في هذه الحالة، وعندما لا نتحدث عن أجهزة الكمبيوتر، فإن القاعدة هي الرقم 10
  • ع = 3 - درجة القاعدة
في كثير من الأحيان، يُفترض أن أساس الترتيب هو 10 ويتم كتابة الجزء العشري وقيمة القاعدة فقط، ويفصل بينهما الحرف E. في مثالنا، قدمت إدخالات مكافئة 1.2 × 10 3 و 1.2 E3 . إذا كان كل شيء واضحًا، وانتهينا من رحلة الحنين إلى المناهج الدراسية، فأنا أوصي الآن بنسيان ذلك، لأنه عند تكوين رقم الفاصلة العائمة، فإننا نتعامل معه قوى اثنين وليس عشرات، أي. n = 2 ، لقد انهارت الصيغة المتناغمة بأكملها 1.2E3 وقد حطمت عقلي حقًا.

التوقيع والدرجة

اذن ماذا عندنا؟ ونتيجة لذلك، لدينا أيضًا رقم ثنائي، يتكون من الجزء العشري - الجزء الذي سنرفعه إلى قوة والقوة نفسها. بالإضافة إلى ذلك، كما هو شائع مع أنواع الأعداد الصحيحة، تحتوي أرقام الفاصلة العائمة على جزء يحدد الإشارة - ما إذا كان الرقم سيكون موجبًا أم سالبًا. على سبيل المثال، أقترح النظر في النوع floatالذي يتكون من 32 بت. مع الأرقام ذات الدقة المزدوجة، doubleالمنطق هو نفسه، فقط هناك ضعف عدد البتات. من بين 32 بت، يتم تخصيص الجزء الأول الأكثر أهمية للعلامة، ويتم تخصيص البتات الثمانية التالية للأس - القوة التي سنرفع إليها الجزء العشري، والـ 23 بت المتبقية - للجزء العشري. للتوضيح، دعونا نلقي نظرة على مثال: ماذا يوجد داخل رقم الفاصلة العائمة وكيف يعمل - 1الجزء الأول بسيط للغاية. إذا كانت قيمة البت الأول هي 0 ، فإن الرقم الذي نحصل عليه سيكون موجبًا . إذا كان البت هو 1 ، فسيكون الرقم سالبًا . الكتلة التالية المكونة من 8 بتات هي كتلة الأس. يتم كتابة الأس كرقم عادي مكون من ثمانية بتات ، وللحصول على الدرجة المطلوبة نحتاج إلى طرح 127 من الرقم الناتج . في حالتنا، البتات الثمانية للأس هي 10000001 . وهذا يتوافق مع الرقم 129 . إذا كان لديك سؤال حول كيفية حساب ذلك، فإن الصورة توضح إجابة سريعة. يمكن الحصول على نسخة موسعة في أي دورة للجبر البوليني. ماذا يوجد داخل رقم الفاصلة العائمة وكيف يعمل - 21×2 7 + 0×2 6 + 0×2 5 + 0×2 4 + 0×2 3 + 0×2 2 + 0×2 1 + 1×2 0 = 1×128 + 1×1 = 128+ 1=129 ليس من الصعب حساب أن الحد الأقصى للرقم الذي يمكننا الحصول عليه من هذه البتات الثمانية هو 11111111 2 = 255 10 (المنخفض 2 و 10 يعني أنظمة الأرقام الثنائية والعشرية) ومع ذلك، إذا استخدمنا قيم الأس الموجبة فقط ( من 0 إلى 255 )، فإن الأرقام الناتجة ستكون لها أرقام كثيرة قبل العلامة العشرية، ولكن ليس بعدها؟ للحصول على قيم سلبية للدرجة، تحتاج إلى طرح 127 من الأس الناتج . وبالتالي فإن نطاق الدرجات سيكون من -127 إلى 128 . إذا استخدمنا مثالنا، فإن الدرجة المطلوبة ستكون 129-127 = 2 . دعونا نتذكر هذا الرقم في الوقت الراهن.

الجزء العشري

الآن عن العشري. يتكون من 23 بت، ولكن في البداية توجد دائمًا وحدة أخرى ضمنية، والتي لا يتم تخصيص البتات لها. ويتم ذلك لأسباب تتعلق بالنفعية والاقتصاد. يمكن التعبير عن نفس الرقم بقوى مختلفة عن طريق إضافة أصفار إلى الجزء العشري قبل العلامة العشرية أو بعدها. أسهل طريقة لفهم ذلك هي باستخدام الأس العشري: 120,000 = 1.2×10 5 = 0.12×10 6 = 0.012×10 7 = 0.0012×10 8 إلخ. ومع ذلك، من خلال إدخال رقم ثابت في رأس الجزء العشري، سنتلقى أرقامًا جديدة في كل مرة. لنفترض أنه قبل الـ 23 بت لدينا سيكون هناك واحد آخر مع واحد. عادة ما يتم فصل هذا الجزء عن الباقي بنقطة، ومع ذلك، لا يعني أي شيء. إنها أكثر ملاءمة فقط 1. 111000000000000000000000 ماذا يوجد داخل رقم الفاصلة العائمة وكيف يعمل - 3الآن يجب رفع الجزء العشري الناتج إلى قوة من اليسار إلى اليمين، مما يؤدي إلى تقليل القوة بمقدار واحد مع كل خطوة. نبدأ بقيمة الأس التي حصلنا عليها نتيجة الحساب أي 2 (تعمدت اختيار مثال بسيط حتى لا أكتب كل قيمة للأس اثنين ولم أحسبها في الجدول أعلاه عند البتة المقابلة هي صفر) ماذا يوجد داخل رقم الفاصلة العائمة وكيف يعمل - 41×2 2 + 1×2 1 + 1×2 0 + 1×2 -1 = 1×4 + 1×2 + 1×1 + 1×0.5 = 4+2+1+0.5 = 7.5 وحصلت على النتيجة 7.5 ويمكن التأكد من صحتها مثلا على هذا الرابط

نتائج

يتكون رقم الفاصلة العائمة القياسي floatمن 32 بت، البت الأول هو الإشارة (+ أو -)، والثمانية التالية هي الأس، والـ 23 التالية هي الجزء العشري بالعلامة - إذا كانت البتة 0 رقمًا موجبًا. إذا كانت البتة 1 سلبية. بواسطة الأسي - نقوم بتحويل البتات إلى رقم عشري (البت الأول من اليسار هو 128 ، والثاني هو 64 ، والثالث 32 ، والرابع 16 ، والخامس 8 ، والسادس 4 ، والسابع 2 ، الثامن هو 1 )، اطرح 127 من الرقم الناتج ، نحصل على الدرجة التي سنبدأ بها. وفقًا للجزء العشري - نضيف بتًا آخر بقيمة 1 إلى 23 بت الموجودة في المقدمة ومنه نبدأ في رفع القدرة التي تلقيناها، مع تقليل هذه القوة مع كل بتة لاحقة. هذا كل شيء يا رفاق يا أطفال! ماذا يوجد داخل رقم الفاصلة العائمة وكيف يعمل - 5ملاحظة: كواجب منزلي، باستخدام هذه المقالة، اترك في التعليقات إصداراتك حول سبب حدوث أخطاء دقيقة مع عدد كبير من العمليات الحسابية بأرقام الفاصلة العائمة
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION