একটি গাণিতিক এক্সপ্রেশন টাইপ করুন এবং সঙ্গে সঙ্গে ফলাফল পান, রেডিয়ান বা ডিগ্রিতে ত্রিকোণমিতি, লগারিদম, ফ্যাক্টোরিয়াল, ধ্রুবক এবং সম্পূর্ণ অপারেটর অগ্রাধিকারসহ।
এক্সপ্রেশনটি এমনভাবে লিখুন যেভাবে আপনি কাগজে লিখতেন। পার্সার নেস্টেড প্যারেন্থেসিস, ইউনারি মাইনাস, ফ্যাক্টোরিয়াল ও ফাংশন কল সঠিক অগ্রাধিকারসহ হ্যান্ডেল করে, তাই 2 + 3 * 4 হলো 14 এবং -3^2 হলো -9, ঠিক যেমন গাণিতিক প্রথা চায়।
2 + 3 * 4 পড়তে জানতে হয় যে গুণ যোগের চেয়ে শক্তভাবে আবদ্ধ, তাই উত্তর 14 হয় 20 নয়। প্রতিটি অপারেটর একটি অগ্রাধিকার স্তর ও একটি অ্যাসোসিয়েটিভিটি বহন করে। গুণ, ভাগ ও ভাগশেষ অপারেটর যোগ ও বিয়োগের উপরে বসে; সূচক তাদের সবের উপরে বসে এবং ডান-অ্যাসোসিয়েটিভ, তাই 2^3^2 মানে 2^(3^2) এবং মূল্যায়ন হয় 512, 64 নয়।
ইউনারি মাইনাস সূক্ষ্ম ক্ষেত্র। গাণিতিক প্রথা এটিকে সূচকের নিচে রাখে, এ কারণেই -3^2 হলো -9: সূচক 3-এর ওপর প্রযোজ্য এবং নেতিবাচককরণ ফলাফলের ওপর প্রযোজ্য। স্প্রেডশিট সফটওয়্যার বিখ্যাতভাবে একমত নয় এবং 9 ফেরত দেয়, তাই আপনি যদি কখনো দেখে থাকেন দুইটি টুল একই ফর্মুলায় ভিন্ন উত্তর দিচ্ছে, এটি সাধারণত সেই কারণ। এই ইভালুয়েটর গাণিতিক প্রথা অনুসরণ করে।
প্যারেন্থেসিস সবকিছুকে অগ্রাহ্য করে, এবং সেগুলো স্বাধীনভাবে ব্যবহার করা মূল্যবান। যে এক্সপ্রেশনটি পড়তে অগ্রাধিকার টেবিল প্রয়োজন, তা এমন একটি এক্সপ্রেশন যা একদিন ভুল পড়া হবে।
শান্টিং-ইয়ার্ড, সংক্ষেপে
এক্সপ্রেশনটি প্রথমে টোকেনে ভাঙা হয় - সংখ্যা, নাম, অপারেটর ও বিরামচিহ্ন - এবং তারপর Dijkstra-এর শান্টিং-ইয়ার্ড অ্যালগরিদম দ্বারা পোস্টফিক্স আকারে পুনর্বিন্যাস করা হয়, যেখানে অপারেটররা তাদের অপারেন্ডের পরে আসে। 2 + 3 * 4 হয়ে যায় 2 3 4 * +। পোস্টফিক্সের কোনো প্যারেন্থেসিস বা অগ্রাধিকার নিয়মের প্রয়োজন নেই, কারণ টোকেনের ক্রমই ইতিমধ্যে কাঠামো এনকোড করে, তাই একটি সাধারণ স্ট্যাক মেশিন একক পাসে এটি মূল্যায়ন করতে পারে।
অ্যালগরিদম দুটি কাঠামো রাখে: একটি আউটপুট তালিকা ও একটি অপারেটর স্ট্যাক। সংখ্যা সরাসরি আউটপুটে যায়; একটি অপারেটর পুশ হওয়ার আগে প্রথমে যেকোনো স্ট্যাককৃত অপারেটর পপ করে যা অন্তত ততটা শক্তভাবে আবদ্ধ। প্যারেন্থেসিস স্ট্যাকে মার্কার হিসেবে কাজ করে, এবং একটি ক্লোজিং প্যারেন্থেসিস সবকিছু তার সঙ্গী পর্যন্ত পপ করে। ফাংশন কলগুলো অপারেটর হিসেবে ভ্রমণ করে যার সাথে একটি আর্গুমেন্ট গণনা থাকে যা প্রতিবার কমা দেখা গেলে বৃদ্ধি পায়।
এটি স্প্রেডশিট ইঞ্জিন ও কোয়েরি প্ল্যানারের ভেতরে ব্যবহৃত একই কৌশল। এটি লিনিয়ার সময়ে চলে, কোনো রিকার্সনের প্রয়োজন নেই, এবং একটি ভুল গঠনের এক্সপ্রেশন স্বাভাবিকভাবে রিপোর্ট করে: শেষে স্ট্যাকটি পরিষ্কারভাবে খালি না হলে, ইনপুটটি ভারসাম্যহীন ছিল।
ভাসমান বিন্দু, সৎভাবে
ফলাফল IEEE 754 ডাবল নির্ভুলতায় গণনা করা হয়, একই পাটিগণিত যা প্রতিটি ব্রাউজার ও বেশিরভাগ প্রোগ্রামিং ভাষা ব্যবহার করে। এটি সংখ্যাগুলো বাইনারিতে সঞ্চয় করে, এবং 0.1-এর মতো দশমিক ভগ্নাংশের কোনো সঠিক বাইনারি উপস্থাপনা নেই, এ কারণেই 0.1 + 0.2 বিখ্যাতভাবে 0.3-এর বদলে 0.30000000000000004 উৎপন্ন করে।
নির্দিষ্ট সংখ্যক উল্লেখযোগ্য অঙ্কে প্রদর্শন রাউন্ড করা অন্তর্নিহিত মান পরিবর্তন না করেই সেই গোলমাল লুকিয়ে রাখে, যা এখানে নির্ভুলতা নিয়ন্ত্রণ যা করে। এটি 12-এ সেট করলে উত্তরটি পাঠযোগ্য থাকে এবং একটি ডাবল আসলে পার্থক্য করতে পারে এমন 15 থেকে 17 অঙ্কের আগে যথেষ্ট জায়গা রাখে।
দুটি সীমা মনে রাখার মতো। পূর্ণসংখ্যা কেবল 2^53 পর্যন্ত সঠিক থাকে, তাই খুব বড় ফ্যাক্টোরিয়াল ও গুণফল সরে যায়; 170! এর উপরের যেকোনো কিছু সম্পূর্ণভাবে ইনফিনিটিতে ওভারফ্লো হয়। এবং দুটি প্রায় সমান সংখ্যা বিয়োগ করলে নির্ভুলতা ধ্বংস হয় - অগ্রণী অঙ্কগুলো বাতিল হয় এবং কেবল গোলমালযুক্ত শেষের অঙ্কগুলো টিকে থাকে - তাই সেই বিয়োগ এড়াতে পুনর্বিন্যাস করা একটি ফর্মুলা প্রায়ই সুস্পষ্ট রূপের চেয়ে অনেক বেশি নির্ভুল হবে।
FAQ
কেন -3^2 9-এর বদলে -9 দেয়?
গাণিতিক প্রথা ইউনারি মাইনাসের চেয়ে সূচককে শক্তভাবে আবদ্ধ করে, তাই বর্গ 3-এর ওপর প্রযোজ্য এবং নেতিবাচককরণ পরে প্রযোজ্য। 9 চাইলে (-3)^2 লিখুন, যা স্প্রেডশিট ডিফল্টভাবে ধরে নেয়।
কেন 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 দিয়ে চালানো হয়?
না। এটি একটি নিবেদিত পার্সার দ্বারা টোকেনাইজ ও পোস্টফিক্সে রূপান্তরিত হয়, তারপর একটি ছোট স্ট্যাক মেশিনে মূল্যায়ন করা হয়, তাই আপনি যা টাইপ করেন তা কখনো JavaScript হিসেবে কার্যকর হয় না।