سؤال

ما هو النطاق الشامل للتعويم والمزدوج في Java؟

لماذا لا يُنصح باستخدام التعويم أو المزدوج لأي شيء تكون فيه الدقة أمرًا بالغ الأهمية؟

هل كانت مفيدة؟

المحلول

Double الطبقة جاوة ديها أعضاء تحتوي على قيمة الحد الأدنى والحد الأقصى للنوع.

2^-1074 <= x <= (2-2^-52)·2^1023 // where x is the double.

وتحقق من Min_VALUE وMAX_VALUE أعضاء النهائي ثابت Double.

وسوف (بعض) الناس توحي بعدم استخدام العائمة أنواع نقطة للأشياء حيث الدقة والإحكام حاسمة بسبب أخطاء التقريب يمكن التخلص من الحسابات التي يمكن قياسها كميات (صغيرة).

نصائح أخرى

وأنواع البيانات البدائية جاوة

ومنطقية: 1-بت. قد يستغرق على قيم الصواب والخطأ فقط.

والبايت: 1 قعت بايت (اثنان في تكملة). تغطي القيم من -128 إلى 127.

وباختصار: 2 بايت، وقعت (اثنان في تكملة)، -32،768 إلى 32،767

والباحث: 4 بايت، وقعت (اثنان في تكملة). -2147483648 إلى 2147483647.

وطويلة: 8 بايت وقعت (اثنان في تكملة). نطاقات من -9.223.372.036.854.775.808 إلى +9.223.372.036.854.775.807.

وتعويم: 4 بايت، IEEE 754. ويغطي مجموعة من 1.40129846432481707e-45 ل3.40282346638528860e + 38 (إيجابية أو سلبية).

وضعف: 8 بايت IEEE 754. يغطي مجموعة من 4.94065645841246544e-324D ل1.79769313486231570e + 308D (إيجابية أو سلبية).

وشار: 2 بايت، غير موقعة، يونيكود، 0 إلى 65535

وثنائي أرقام الفاصلة العائمة لها خصائص الدقة مثيرة للاهتمام، حيث يتم تخزين القيمة كعدد صحيح ثنائي مرفوع إلى قوة الثنائية. عند التعامل مع القيم الفرعية صحيحا (أي، القيم بين 0 و 1)، القوى السلبية اثنين من "جولة قبالة" بشكل مختلف جدا من القوى السلبية من عشر سنوات.

وعلى سبيل المثال، الرقم 0.1 يمكن أن يمثله 1 × 10 <سوب> -1 ، ولكن ليس هناك مزيج من قاعدة 2 الأس والجزء العشري التي يمكن أن تمثل بدقة 0.1 - الأقرب تحصل عليه 0،10000000000000001.

وحتى إذا كان لديك تطبيق حيث كنت تعمل مع القيم مثل 0.1 أو 0.01 قدرا كبيرا، ولكن أين لا يمكن السكوت صغيرة (أقل من 0.000000000000001٪) أخطاء، أرقام الفاصلة العائمة ثم ثنائية ليست لك.

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

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

من أنواع البيانات الأولية:

  • float: ال float نوع البيانات هو IEEE 754 32 بت أحادي الدقة نقطة عائمة.نطاق قيمها هو خارج نطاق هذه المناقشة، ولكن محدد في القسم 4.2.3مواصفات لغة جافا.مثل مع توصيات ل byteو short, ، إستخدم float (بدلاً من double) إذا كنت بحاجة إلى حفظ الذاكرة في صفائف كبيرة من النقطة العائمة الأرقام.يجب ألا يكون نوع البيانات هذا أبدا يمكن استخدامها لقيم دقيقة، مثل عملة.لذلك ، سوف تحتاج إلى استخدم الزر java.math.BigDecimalالطبقة بدلا من ذلك. أرقام و سلاسل أغلفة BigDecimal و فئات مفيدة أخرى مقدمة من منصة جافا.

  • double:ال double نوع البيانات هو دقة مزدوجة 64 بت IEEE 754 نقطة عائمة.نطاق قيمها هو خارج نطاق هذه المناقشة، ولكن محدد في القسم 4.2.3مواصفات لغة جافا.بالنسبة للقيم العشرية، يكون نوع البيانات هذا عموما الخيار الافتراضي.مثل المذكورة أعلاه ، يجب أن يكون هذا النوع من البيانات لا تستخدم أبدا لقيم دقيقة ، مثل كعملة.

للتعرف على نطاق القيم، راجع القسم 4.2.3 أنواع النقاط العائمة وتنسيقاتها وقيمها من JLS.

وبالطبع يمكنك استخدام العوامات أو الزوجي للأشياء "حرجة" ... العديد من التطبيقات لا تفعل شيئا ولكن الأرقام أزمة استخدام هذه أنواع البيانات.

وكنت قد يساء فهمها بعض المحاذير المختلفة بشأن أرقام الفاصلة العائمة، مثل التوصية أبدا <لأ href = "http://www.cygnus-software.com/papers/comparingfloats/Comparing٪20floating٪20point ٪ 20numbers.htm "يختلط =" نوفولو noreferrer "> مقارنة أجل المساواة بالضبط ، وهلم جرا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top