لمحة جافاوية 54: استخدم ولا تستخدم 3

السلام عليكم

كيف حالكم يا شباب
إن شاء الله تكونوا في أحسن حال
كنت حدثتكم مسبقاً عن سرقة خاطرة بغداد الخاصة بي ونسبها للشاعر الكبير كريم العراقي
وحاشا كريم أن يكون له علاقة بالموضوع
المشكلة أن الموضوع لم يتوقف عند هذا الحد فقط
تخيلوا من فترة قريبة وجدت من يعلق على المدونة عندي
على مقالة عن كريم
ونص التعليق كالتالي
مرحبا بشاعر العظيم والاخ كريم العراقي اتمن من الله العلي القدير أن يمد في عمرك
وان يعطيك الصحه والعافيه وأتذكر الايام الحلوه الجميله التي قضينها معا في الاردن أخوك محمد فرج البغدادي -الشارقه
يبدو أن الموضوع فيه إنا كبيرة
طبعاً هذه الإنا تقع في أحد الاحتمالات التالية
1- أنا أشبه كريم العراقي في الأسلوب بدرجة مخيفة
2- هناك من يثير الإشاعات حول كوني كريم العراقي
3- هذا إنسان بسيط لسبب ما اعتقد أني كريم
4- هذا صديق يحاول سبك مقلب محترم لي
5- أنا أعاني شيزوفرينيا وأقوم بالرد على نفسي
لو فندنا الاحتمالات السابقة فأعتقد أن النقطة الأولى بالتأكيد غير صحيحة
كما أعرف أن الثرى لن يبلغ الثرايا ما حاول لكني أحاول
بالنسبة للنقطة الثانية لا يمكنني النفي أو الإثبات لكني لا أعتقد أن هناك من سيستفيد من هكذا شيء
بالنسبة للنقطة الثالثة لا تعليق عليها

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


public class DoubleTest { 
	public static void main(String[] args) {
		for (double i = 0; i < 10; i+=0.1) {
			System.out.println(i);
		}
	}
} 

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

import java.math.BigDecimal;


public class DoubleTest { 
	public static void main(String[] args) {
		BigDecimal decimal=new BigDecimal("0");
		final BigDecimal constant=new BigDecimal(".1");
		for (double i = 0; i < 10; i+=0.1) {
			System.out.println(decimal=decimal.add(constant));
		}
	}
} 

على كل لكلا الطرفين محاسنهم وعيوبهم
ربما أكلمكم عن ذلك في تدوينة أخرى لكني لا أعد بشيء كعادتي

تحياتي

Tags: , , , , , ,

6 Responses to “لمحة جافاوية 54: استخدم ولا تستخدم 3”

  1. LuLu قال:

    حلو كتير
    طيب سؤال
    ليش في الطريقة الاولى وصّل لغاية 9.99999
    وفي التانية وصّل لغاية 10.1
    يعني زي م بتعرف هيك اشياء برضو بتأثر
    وبتهيألي انو الاصح نصل لل 9.9 يعني الطريقة التانية بالرغم انها افضل بس ماطلعت تمام
    ولا انا فاهمة غلط؟
    وبارك الله فيك

  2. admin قال:

    ابحثي في الشيفرة الثانية وستجدي الحل
    أنا استخدمت double في التكرار for
    بمعنى أن العدد وصل إلى 9.9999 وهو عدد أقل من 10
    لذا فشرط التكرار تحقق مرة إضافية
    مما أدى إلى الزيادة الحاصلة
    ومن هذه المشكلة نستفيد العبرة التالية
    لا تستخدم متغيرات من نوع double كمتغير التكرار

    ملاحظة: توقعت أن لا ينتبه أحد للموضوع
    تحياتي

  3. abuouf قال:

    كيف حالك اخي العزيز وشكراً لسؤالك علينا
    هو الاخ عبده راح فين !!!
    معلش مش فاهم حاجة يومين وهارجع اقرا الموضوع ونضع تعليق محترم شوية لاني مش مسطب الجافا كنت ناوي أتركها :))
    جزاكم الله خير حتي نرجع

  4. admin قال:

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

    تحياتي

  5. توفيق قال:

    السلام عليكم

    لله درك يا اخ علاء

    انا فين عن هالمدونة من زمان والله درر

  6. admin قال:

    توفيق لقد مدحتني فأطلت
    وأنا ما تعودت إلى على التجاهل
    حتى بدأت أكره أن يمدحني أحد

    لذا اكتفي بالشكر
    تحياتي

Leave a Reply