CodeGym /مدونة جافا /Random-AR /جافا تعويم الكلمة الرئيسية
John Squirrels
مستوى
San Francisco

جافا تعويم الكلمة الرئيسية

نشرت في المجموعة
في مرحلة ما من تطور تكنولوجيا الحوسبة، أصبح من الواضح أن وحدات المعالجة المركزية تحتاج إلى أجهزة لمعالجة أرقام الفاصلة العائمة. اليوم، يمكن لجميع بنيات الكمبيوتر العمل بفعالية مع هذه الأرقام. بالطبع، في لغات البرمجة، لا يمكنك أيضًا الاستغناء عن أنواع البيانات المقابلة. هناك نوعان من البيانات ذات الفاصلة العائمة في Java: float وdouble. تحدد الكلمة الأساسية Java Float رقمًا حقيقيًا يشغل 32 بت في الذاكرة. سنتحدث عن هذه الأرقام في هذه المقالة.

أرقام النقطة العائمة. كيف يتم تخزين الأرقام الحقيقية في الكمبيوتر؟

لتخزين الأرقام الحقيقية في ذاكرة الكمبيوتر، يتم تخصيص عدد معين من البتات. يتم تخزين الرقم الحقيقي كعلامة (زائد أو ناقص)، والسرعوف، والأس. من الأفضل شرح ما هو الجزء العشري والأس بمثال. الكتلة التقريبية للقمر هي 7*1022. هنا 7 هو السرعوف، في 22 الأس. عند عرض أرقام كبيرة أو العكس، أرقام صغيرة جدًا على الشاشة، يمكنك رؤية إدخال مثل 7E22. هذا هو رقم النقطة العائمة، و7 هنا هو السرعوف، و22 هو الأس أو قوة العدد 10. ويسمى هذا الترميز بالترميز الأسي.

Java Keyword Keyword و Java Double Keyword

يتم تمثيل القيم العائمة (أرقام الفاصلة العائمة أو الأرقام الحقيقية) في Java بالأنواع float و double . يتم استخدام هذه الكلمات الأساسية لتخزين القيم حتى علامة معينة بعد العلامة العشرية. double هي أرقام ذات دقة مضاعفة، أقرب ما يمكن إلى القيم المعطاة أو التي تم الحصول عليها نتيجة للحسابات. يتم استخدام Java Double في أي حسابات رياضية (الجذر التربيعي، وجيب التمام، وجيب التمام، ..)، وكذلك لجميع الحسابات التي تكون فيها دقة معينة مهمة. يُستخدم نوع البيانات العائمة لنوع النقطة العائمة الأقل دقة. نادرًا ما يتم استخدامه لحفظ الذاكرة. أدناه لدينا جدول يحتوي على المعلومات الأساسية حول التعويم والمزدوج، بالإضافة إلى الاختلافات بينهما.
يطفو مزدوج
رئيسي Float هي قيمة ذات دقة واحدة إنها قيمة مزدوجة الدقة
حجم افتراضى 4 بايت (32 بت) 8 بايت (64 بت)
القيمة الافتراضية 0.0f 0.0
يتراوح من 1.4e–045 إلى 3.4e+038 من 4.9e–324 إلى 1.8e+308
لماذا يتم استخدامه لحفظ الذاكرة للعمل مع الأعداد الكسرية بدقة نسبية
لذا فإن الكلمة الأساسية Float تعني رقمًا، وهي قيمة أحادية الدقة تأخذ 32 بت أو 4 بايت في الذاكرة. في بعض المعالجات، يكون العمل مع هذه الأرقام أسرع، وكما ذكرنا سابقًا، فإنها تشغل مساحة أقل مقارنةً بالأرقام ذات الدقة المزدوجة. ومع ذلك، فمن المستحيل أن نقول بشكل لا لبس فيه مع السرعة. لنفترض أن بعض المعالجات الحديثة تعالج أرقامًا مضاعفة الدقة بشكل أسرع.

تعويم جافا والإعلان المزدوج

يمكنك الإعلان عن عدد من الأنواع بشكل مزدوج بنفس طريقة تعريف أرقام الأنواع الأخرى:

double myDouble = 2.7;
ومع ذلك، إذا قمت بتمثيل رقم الفاصلة العائمة بهذه الطريقة، فسيطلب منك المترجم تغيير نوع الرقم لمضاعفة. فيما يلي مثال غير صحيح للمتغير العائم :

public class FloatExample {
   public static void main(String[] args) {
//double and float variables 
       double myDouble = 2.7;
       float myFloat = 3.14;
   }
}
إليك ما يحدث إذا قمت بتشغيل هذا البرنامج:

Error:(4, 25) java: incompatible types: possible lossy conversion from double to float
الحقيقة هي أنه من غير المرغوب فيه استخدام الأرقام العائمة، ويجب أن يتم ذلك فقط لحفظ الذاكرة. جميع الأعداد الكسرية الحقيقية في Java تكون مزدوجة بشكل افتراضي، كما يؤكد بناء جملة اللغة على ذلك أيضًا. إذا كنت تريد حقًا العمل مع النوع العائم، فأنت بحاجة إلى تحديده بشكل صريح باستخدام الحرف f لإنهاء الرقم.

public class FloatExample {
   public static void main(String[] args) {
//double and float variables
       double myDouble = 2.7;
       float myFloat = 3.14f;
   }
}
بالمناسبة، يمكن كتابة الأعداد العائمة والمزدوجة بالشكل الأسي.

float myFloat2 = 2E22f;
double myDouble2 = 3e10;
إذا كنت تستخدم أرقامًا كبيرة بما يكفي في تمثيلها "العادي"، فستعرضها Java على الفور في شكل أسي. دعونا نحصل على مثال:

public class FloatExample {
   public static void main(String[] args) {
//float variables
               float myFloatNumber1=2182818284590.45f;
               float myFloatNumber2=19822612787260.141592181f;
               System.out.println("myFloatNumber1 = " + myFloatNumber1);
               System.out.println("myFloatNumber2 = " + myFloatNumber2);
       System.out.println("myFloatNumber1 + myFloatNumber2 = " + myFloatNumber1 + myFloatNumber2);
           }
       }
نتيجة عمل هذا البرنامج هنا:
myFloatNumber1 = 2.1828183E12 myFloatNumber2 = 1.98226121E13 myFloatNumber1 + myFloatNumber2 = 2.1828183E121.98226121E13

مثال خاص على التعويم والأرقام المزدوجة

هناك ثلاثة أرقام عائمة خاصة في لغة Java، تُستخدم للإشارة إلى التجاوزات والأخطاء. ها هم:
  • اللانهاية الموجبة هي نتيجة قسمة رقم موجب على 0. ويمثلها الثوابت Double.POSITIVE_INFINITY و Float.POSITIVE_INFINITY .

  • اللانهاية السالبة هي نتيجة قسمة رقم سالب على 0. ويمثلها الثوابت Double.NEGATIVE_INFINITY و Float.NEGATIVE_INFINITY .

  • NaN (ليس رقمًا) يمثل حساب 0/0 أو أخذ الجذر التربيعي لعدد سالب. ممثلة بالثوابت Double.NaN و Float.NAN .

فيما يلي مثال على استخدام أرقام الفاصلة العائمة الخاصة هذه:

public class FloatExample {
   public static void main(String[] args) {
       int myInt = 1;
       float zero = 0.0f;
       double negZero = -0.0;
       double negativeInfinity = Double.NEGATIVE_INFINITY;
       double positiveInfinity = Float.POSITIVE_INFINITY;

       System.out.println(myInt / zero);
       System.out.println(myInt / negZero);
       System.out.println(zero == negZero);
       System.out.println(negativeInfinity * 0);
       System.out.println(positiveInfinity+negativeInfinity);

   }
}
النتيجه هي:
إنفينيتي -إنفينيتي صحيح نان نان

هل الدقة المزدوجة كافية؟

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

public class FloatExample {
   public static void main(String[] args) {
       System.out. println( "2.0 - 1.1 = " + (2.0 - 1.1));
   }
}
ستحصل على النتيجة التالية:
2.0 - 1.1 = 0.8999999999999999
سيكون من المنطقي أن نفترض أن النتيجة ستكون 0.9. ومع ذلك، فإن مثل هذه الأخطاء شائعة جدًا وترتبط بالتمثيل الثنائي الداخلي للأرقام. لا يمكننا، على سبيل المثال، تمثيل القيمة الدقيقة لـ ⅓ ككسر عشري؛ وبطبيعة الحال، هناك قيود مماثلة في النظام الثنائي. إذا كانت المهمة تتطلب إزالة أخطاء التقريب، فإن Java لديها فئة BigDecimal لهذا الغرض.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION