if (abs (a-b) < EPS) . . .
لقد اختاروا بسذاجة نفس رقم 1e-8 لجميع مشاريعهم ، مما خلق بقعة محتملة لأخطاء جسيمة. علاوة على ذلك ، حاولوا مقارنة زوجي مثل هذا:
if (a < b) . . .
لا أفهم لماذا وبختهم عندما رأيت مثل هذا الهراء. أنا لا أتحدث حتى عن الرعب الذي يمثله ثابت مثل 0x400921fb54442d18 (مجرد رقم) التي يمكن رؤيتها في بعض البرامج القديمة أو على شاشة مصحح الأخطاء.

بمجرد إجراء عملية التصحيح ، اكتشف أحد الزملاء أن التعبير مع double لا يتغير عندما يحاول إضافة رقمين ، ثم بدأ يخطئ في خطأ في المترجم أو المصحح ، حتى شرحت في أي الحالات سيظل مجموع رقمين مساويًا لأحد المصطلحات فقط ...
تعد حيل تبديل الأرقام مخيفة أيضًا للكثيرين ، وفي StackOverflow ، غالبًا ما رأيت أسئلة محيرة من المستخدمين حول سبب تغيير بسيط في تعبير يؤدي إلى نتائج مختلفة ولماذا يمكن أن يؤدي تحسين الكود إلى إجابة خاطئة تمامًا. ذات مرة ، ذكر أحد المستخدمين بوضوح أنه وجد خطأ في المعالج عندما قام بتحويل عدد صحيح من 64 بت إلى رقم دقة مزدوج ، ثم عاد - وحصل على رقم آخر. من الواضح أنه لم يكن يعرف كيف ضاعت 11 بتًا على الأقل مع هذا التحويل. وهذا الجهل موجود حتى بين أولئك الذين هم على يقين من أنه يعرف فقط كيف يعمل كل شيء.
حتى في حالة حبري ، غالبًا ما توجد مقالات يقوم فيها المؤلفون "بفضح" السلوك غير المفهوم لأرقام الفاصلة العائمة ويمررون اكتشافهم على أنه شيء جديد وغير معروف وغير واضح وغامض. من الغريب أن نرى مثل هذه المقالات كتبها مبرمجون محترفون على ما يبدو. لن أنشرهم ، يرجى البحث عنها بنفسك.
يبدو أن المواد التدريبية المختلفة يجب أن تحل المشكلة ، لكن لا. كقاعدة عامة ، يخاف القارئ من الصيغ والكلمات غير المفهومة ، التي يلقيها المؤلف على الفور: الرقم الطبيعي ، الوحدة المخفية ، الأس المتحيز- وبعد ذلك ، دون شرح أسباب ظهور حل معين في معيار IEEE-754 ، يبدأ عرض جاف للنظرية. محاضرات الفيديو حول هذا الموضوع أيضًا لا تتألق مع التنوع: يبدو أن الجميع يحلل نفس المثال البدائي ، حيث يتحول كل شيء بسرعة وبشكل جميل ... ولن يخمن الطالب أبدًا أن ما يقرب من 100 ٪ من المترجمين يعملون مع الحساب العائم مع وجود أخطاء. هذا أمر مفهوم ، مثل هؤلاء المعلمين أنفسهم لا يعرفون ما الذي يأتي منه وكيف يعمل ، وبالتالي فهم يخبرون فقط ما يفهمونه بأنفسهم ، ومن الواضح تمامًا أنهم اكتشفوا بالأمس عالم حساب الفاصلة العائمة ، لكنهم بالفعل في عجلة من أمرهم مرتبكون احكي عنه. أنا لا ألوم ، لكنني أعتقد أن مثل هذا السلوك في الأماكن العامة غير مقبول.
لذلك قررت أن أحاول إصلاح الوضع وخلقه بشكل مامحاكمةدورة تدريبية. هذه دورة فيديو تغمر المشاهد بسلاسة في عالم حساب النقطة العائمة. درسنا في الدروس الأربعة الأولى نظام الأعداد العشرية وكيف تجبرنا الظروف على إنشاء نظام واحد أو آخر من الأرقام ، ونصل في النهاية إلى نظام الفاصلة العائمة في هذا الشكل. من أين يأتي التطبيع ولماذا هو مطلوب؟ من أين تأتي مشكلة الجمعيات؟ كيف ولماذا يتم فقدان الدقة وماذا تفعل حيال ذلك؟ ما هو المحظور تمامًا ولماذا؟ لماذا تظهر الأرقام غير المطابقة في مثل هذا النظام وما هي بشكل عام؟ ثم تظهر الدروس الأربعة التالية كيف تتناسب كل هذه المعرفة بشكل جيد مع الحساب الثنائي ومن أين تأتي فكرة البت المخفي. عندما تظهر "الصيغة الرهيبة" الأولى على الشاشة ،يمتلك المشاهد بالفعل الصورة اللازمة لحساب النقطة العائمة في رأسه ويفهم بسهولة منطق هذه الصيغة ... بالطبع ، إذا أجرى التمارين بشكل صحيح. كل هذه الدروس الثمانية هي الجزء الأول من الدورة ، فهي مخصصة للمبتدئين. والثاني سيكون للمبرمجين المتقدمين وهو قيد التطوير حاليًا.
لماذا الفيديو وليس النص؟ الشرح بسيط: أجرب تنسيقات مختلفة وأجد صعوبة في القراءة للمبتدئين. من يعرف كيف يقرأ بعناية سيفتح الكتاب المدرسي ويقرأ النص بالصيغ ويفهم ويفهم. بالنسبة لأولئك الذين يجدون صعوبة في القراءة ، والذين يخافون من الأشياء الصعبة والذين يجدون أنه من الأسهل دراسة المواد على فنجان شاي ، فإن الانغماس السلس في تنسيق الفيديو مع التعليق الصوتي مناسب. الكثير من الماء؟ نعم ، هذا ممكن ، لكن الدورة مصممة حتى لأولئك الأشخاص الذين يرغبون في البرمجة ، لكنهم لم يكونوا أصدقاء مع الرياضيات في المدرسة. لذلك ، ما هو "الماء" بالنسبة لك ليس الماء ، ولكن ما تعرفه جيدًا من المدرسة ، والعديد من طلابي لا يعرفونه. كن متعاليًا لهم ، لقد بدأنا جميعًا في مكان ما. ويمكن أيضًا أن يُنظر إلى الفيديو كإعداد لقراءة الكتب المدرسية الجادة. موافق ، من الجيد أن تفتح كتابًا دراسيًا وتفهم ما هو مكتوب فيه بشكل أسرع ،لأن الصورة المطلوبة موجودة بالفعل في الرأس.
عن نفسي: كنت مدرسًا محترفًا سابقًا ، عملت 11 عامًا في إحدى الجامعات ، وقمت بتدريس الرياضيات والبرمجة ، وفي السنوات الأخيرة قمت بتطوير مكتبات رياضية للحوسبة عالية الأداء. أفهم جيدًا ما يريده جمهوري المستهدف ، وأدرك جيدًا ما هو مطلوب في هذا الموضوع في عالم البرمجة ، وبالتالي أعتقد أن لدي الحق في إنشاء مثل هذه الدورات ، ويمكنك أن ترى بنفسك أن المحاضرات مماثلة في الجودة (من حيث المحتوى ) لن تجد الروسية الآن. تحقق من ذلك! الدروس الأربعة الأولى ، والتي ستتعلم منها بالفعل الكثير من الأشياء الممتعة ، مجانية تمامًا. إذا كنت ترغب في ذلك ، يمكنك متابعة البقية ، فهي أكثر إثارة للاهتمام ، ولكن مقابل رسوم. يجب احترام عمل شخص آخر : أنا لست كذلكأبيع المعرفة ، لكني بحاجة إلى دعم لمواصلة عملي التعليمي ، لذا فإن وقتي يستحق المال. بشكل عام ، يمكنك استخلاص استنتاجات حول جودة عملي من مقالاتي الأخرى حول حبري.
بالنسبة لأولئك الذين ينضمون إلى مجتمع VK الخاص بنا ، يمكنني تقديم خصم بنسبة 50٪ إذا اتصلت برئيس الوزراء. يرجى التسجيل في ZealComputing School (مجاني) ومشاهدة أول 4 دروس. أو هم موجودون على موقع YouTube (الأول موجود هنا - ومزيد من الروابط من الوصف). نعم ، ليس عليك مشاهدة الفيديو التمهيدي الذي أرتبط به ، إنه مجرد إعلان.
ملخص الدروس المدفوعة
الدرس الخامس : لأول مرة ننتقل إلى نظام الأعداد الثنائية. نحن نبني نموذجًا جميلًا وبسيطًا للنقطة العائمة من 6 بتات وهو قريب جدًا من تنسيق IEEE-754. هذا هو الدرس الأهم والأصعب. تم تصميم الدروس الأربعة السابقة لإظهار مصدر أشياء معينة في حساب الفاصلة العائمة ، والآن أنت تفهم كيف تظهر هذه الأشياء بشكل جميل في تنسيق IEEE-754 باستخدام لعبة ومثال مفهوم.
رقم الدرس 6: إدخال التقريب. إنه ليس واضحًا كما هو الحال في الرياضيات المعتادة. سوف تتعلم ما يصعب رؤيته في أبسط الأمثلة التي يقدمها مدرسو الفيديو الآخرون. أي أنه من الصعب أحيانًا تحويل رقم من نظام الأرقام العشري إلى تنسيق IEEE-754 لدرجة أن بعض المترجمين لا يمكنهم القيام بذلك بشكل صحيح. سأشرح بالتفصيل لماذا كل شيء بهذه البساطة من الناحية النظرية ، ولكن ليس في الممارسة.
الدرس رقم 7: هنا تتقن بشكل كامل تنسيقات binary32 و binary64 (عائم ومزدوج) ، وتبين كيف يمكنك عرض تمثيل بت للأرقام في C ++ (في لغات أخرى يكون ذلك ممكنًا أيضًا ، ولكن ليس في الكل ، هناك أحيلك إلى Google أو Yandex وأظهر مدى بساطتها ، على سبيل المثال ، ابحث عن حل Java). بعد هذا الدرس ، تكون بنية أرقام الفاصلة العائمة (إذا قمت بالتمارين جيدًا) واضحة تمامًا لك ولا يمكنك طرح أسئلة لم تتم الإجابة عليها في الدروس السابقة.
الدرس رقم 8: دليل عملي لاستخدام حساب الفاصلة العائمة. بعض الميزات واللحظات الجديدة التي تم وصفها بالفعل: فقدان التبادلية ، والترابط ، والمظاهر غير المتوقعة لما يسمى ب "الاتزان". وأهم نصيحة! ستساعدك هذه النصيحة على تجنب ما يقرب من 100٪ من جميع الأخطاء في المهام النموذجية غير الحرجة. يأتي بعد ذلك مناقشة خطأ التقريب المزدوج ، الخسارة الكارثية لأرقام مهمة: متى وكيف يحدث ذلك. بشكل عام ، يتم وصف جميع الممارسات البسيطة التي لا تتطلب رياضيات متقدمة في هذا الدرس.
ماذا يتضمن أيضا في الدورة؟ ولا حاجة للمزيد! يمكنك أن تسألني أسئلة حول الدروس ، لكنني متأكد من أنها لن تظهر. يحتوي كل درس على تمارين شاملة مع إجابات ، لذا فإن مشاركتي بشكل عام غير مطلوبة ، ومن هنا انخفاض السعر. دورة كاملة مع المدرب ، والتواصل ، وورشة العمل الموجهة والمحاضرات الحية ستكلف عشرة أضعاف.
تعلم سعيد!