قراءة 2 + 3 * 4 تتطلب معرفة أن الضرب يترابط بإحكام أكبر من الجمع، لذا الجواب 14 لا 20. كل مشغل يحمل مستوى أسبقية وترابطًا. الضرب والقسمة ومشغل الباقي فوق الجمع والطرح؛ الأس فوق كل ذلك وهو ترابط أيمن، لذا 2^3^2 تعني 2^(3^2) وتُقيّم إلى 512 لا 64.
الطرح الأحادي هو الحالة الخفية. الاصطلاح الرياضي يضعه دون الأس، ولهذا -3^2 تساوي -9: الأس ينطبق على 3 والنفي ينطبق على النتيجة. برامج الجداول تشتهر بمخالفتها وتعرض 9، فإذا رأيت يومًا أداتين تعطيان إجابتين مختلفتين لنفس الصيغة، فعادةً هذا هو السبب. هذه الحاسبة تتبع الاصطلاح الرياضي.
الأقواس تلغي كل ذلك، وتستحق الاستخدام بحرية. تعبير يحتاج جدول أسبقية ليُقرأ هو تعبير سيُقرأ خطأً في النهاية.
شانتينغ يارد بإيجاز
التعبير يُفكك أولًا إلى رموز - أرقام وأسماء ومشغلات وعلامات ترقيم - ثم يُعاد ترتيبه بخوارزمية شانتينغ يارد لدايكسترا إلى صيغة لاحقة، حيث تتبع المشغلات معاملاتها. 2 + 3 * 4 يصبح 2 3 4 * +. الصيغة اللاحقة لا تحتاج أقواسًا ولا قواعد أسبقية، لأن ترتيب الرموز يرمّز البنية بالفعل، لذا يمكن لآلة مكدس بسيطة تقييمها في مسار واحد.
الخوارزمية تحتفظ ببنيين: قائمة مخرجات ومكدس مشغلات. الأرقام تذهب مباشرة إلى المخرج؛ المشغل يفرقع أولًا أي مشغل مرصوص يترابط بإحكام على الأقل قبل أن يُرص هو نفسه. الأقواس تعمل كعلامات على المكدس، وقوس إغلاق يفرقع كل شيء عائدًا إلى قرينه. استدعاءات الدوال تركب كمشغلات مع عدد وسائط يزداد كلما ظهرت فاصلة.
هذه هي التقنية نفسها المستخدمة داخل محركات الجداول ومخططي الاستعلامات. تعمل في زمن خطي، ولا تحتاج عودية، وتبلغ عن تعبير خاطئ طبيعيًا: إذا لم يفرغ المكدس نظيفًا في النهاية، كان الإدخال غير متوازن.
النقطة العائمة بصراحة
النتائج تُحسب بدقة مضاعفة IEEE 754، وهي الحسابات نفسها التي يستخدمها كل متصفح ومعظم لغات البرمجة. تخزن الأرقام ثنائيًا، والكسر العشري مثل 0.1 لا تمثيل ثنائي دقيق له، ولهذا 0.1 + 0.2 تنتج شهيرًا 0.30000000000000004 بدلًا من 0.3.
تقريب العرض إلى عدد مضبوط من الأرقام المعنوية يخفي ذلك الضجيج دون تغيير القيمة الأساسية، وهو ما يفعله مفتاح الدقة هنا. ضبطه على 12 يبقي الجواب مقروءًا مع ترك مساحة وافرة قبل الـ15 إلى 17 رقمًا التي يمكن أن يميزها العدد المضاعف فعلًا.
حدّان جديران بالتذكر. الأعداد الصحيحة تبقى دقيقة حتى 2^53 فقط، لذا فالمضاريب والمنتجات الكبيرة جدًا تنحرف؛ أي شيء فوق 170! يفيض إلى اللانهاية صراحة. وطرح رقمين متقاربين يدمر الدقة - الأرقام الرائدة تلغي ولا تنجو إلا الأرقام الخلفية المزعجة - لذا فالصيغة المعاد ترتيبها لتجنب ذلك الطرح غالبًا أدق بكثير من الصيغة الواضحة.
الأسئلة الشائعة
لماذا تعطي -3^2 ناتج -9 بدلًا من 9؟
الاصطلاح الرياضي يربط الأس بإحكام أكثر من الطرح الأحادي، لذا فالتربيع ينطبق على 3 والنفي يليه. اكتب (-3)^2 إذا أردت 9، وهو ما تفترضه برامج الجداول افتراضيًا.
لماذا 0.1 + 0.2 ليست 0.3 بالضبط؟
لا تستطيع النقطة العائمة الثنائية تمثيل 0.1 بدقة، لذا ينجو خطأ صغير من الجمع. التقريب إلى 12 رقمًا معنويًا يعرض 0.3 بينما تحتفظ القيمة المخزنة بدقتها الكاملة.
كيف أحول حساب المثلثات إلى درجات؟
اضبط وحدة الزاوية على درجات. تُفسَّر مدخلات sin وcos وtan عندئذ بالدرجات، وتعيد asin وacos وatan الدرجات، دون تحويل يدوي بـ pi/180.
أي ثوابت متاحة؟
pi وe وtau (2 pi) وphi (النسبة الذهبية) وinf للانهاية. الأسماء غير حساسة لحالة الأحرف، لذا PI وpi يعملان معًا.
هل تتعامل مع مضاريب الأعداد الكبيرة؟
حتى 170!، وهو أكبر مضروب يستطيع العدد المضاعف حمله. بعد ذلك يفيض الناتج إلى اللانهاية. المضاريب تتطلب أيضًا عددًا صحيحًا غير سالب.
هل يُمرَّر التعبير عبر eval؟
لا. يُرمَّز إلى صيغة لاحقة بواسطة محلل مخصص ثم يُقيَّم على آلة مكدس صغيرة، فلا يُنفَّذ أي شيء تكتبه كجافا سكريبت.