JavaScript चा Math object हा या भाषेचा एक शांत 'utility belt' आहे. तुम्ही त्याचे instance तयार करत नाही. तुम्ही तो import देखील करत नाही. तो प्रत्येक runtime मध्ये उपलब्ध असतो, पिक्सेल व्हॅल्यू राऊंड करण्यापासून ते रँडम फासा (dice roll) तयार करण्यापर्यंत सर्व गोष्टी हाताळण्यासाठी तयार असतो. Math हा एक static object असल्याने, प्रत्येक method आणि property थेट namespace वर असते. तुम्ही Math.PI लिहिता, new Math().PI नाही. या डिझाइनमुळे गोष्टी सोप्या राहतात, पण याचा अर्थ असाही होतो की या object मध्ये काही कठीण पैलू (sharp edges) आहेत जे production logic साठी वापरण्यापूर्वी समजून घेणे गरजेचे आहे.
A Static Object with No Constructor
बहुतेक built-in JavaScript objects तुम्हाला त्यांचे instance तयार करायला सांगतात. तुम्ही new Date() किंवा new Array() कॉल करता. पण Math तसे करत नाही. हे primitive Number type वर काम करणाऱ्या संबंधित functions आणि constants चा एक namespace म्हणून डिझाइन केलेले आहे. Math.sqrt(16) कॉल केल्यावर तुम्हाला 4 मिळेल. जर तुम्ही new keyword वापरण्याचा प्रयत्न केला, तर engine TypeError देईल. ही पद्धत मेमरी स्वच्छ ठेवते आणि हे सूचित करते की Math पूर्णपणे functional आहे. ते इनपुट घेते, आउटपुट देते आणि काहीही बदलत (mutate) नाही.
लक्षात ठेवण्यासारखी एक महत्त्वाची मर्यादा आहे: Math हे standard IEEE 754 numbers सोबत काम करते. ते BigInt सोबत काम करत नाही. जर तुम्ही Math.round() किंवा Math.abs() ला BigInt पास केला, तर तुम्हाला TypeError मिळेल. जर तुमचे application 64-bit integers किंवा त्यापेक्षा मोठ्या संख्यांशी संबंधित असेल, तर तुम्हाला त्यांना convert करावे लागेल किंवा त्याऐवजी native BigInt operators वापरून गणिती प्रक्रिया करावी लागेल.
Constants You Actually Use
Math object अनेक numeric constants उपलब्ध करून देतो, ज्यामुळे तुम्हाला 'magic numbers' हार्ड-कोड करण्याची गरज पडत नाही.
Math.PIहे परिचित 3.14159... आहे, जे वर्तुळ, त्रिकोणमिती (trigonometry) किंवा अंशांचे (degrees) रेडियन्समध्ये रूपांतर करण्यासाठी आवश्यक आहे.Math.Eहे Euler's number आहे, अंदाजे 2.718. हे exponential growth curves, चक्रवाढ व्याज (compound interest) गणना आणि logarithmic scales मध्ये दिसून येते.Math.SQRT2हे दोनचा वर्गमूळ (square root) आहे, अंदाजे 1.414. जेव्हा तुम्हाला चौरसाचा कर्ण (diagonal) हवा असतो किंवा साध्या भूमितीमध्ये vectors normalize करायचे असतात, तेव्हा हे उपयुक्त ठरते.Math.LN2हा 2 चा नैसर्गिक लॉगरिदम (natural logarithm) आहे, अंदाजे 0.693. हे binary trees, information entropy किंवा log-base-2 गणिती विश्लेषण असलेल्या अल्गोरिदममध्ये पाहायला मिळेल.
ही मूल्ये पूर्णपणे double-precision floats आहेत. कारण ती properties आहेत, methods नाहीत, तुम्ही ती कंसाशिवाय (parentheses) वापरू शकता.
Rounding, Signs, and Absolute Values
सर्वात सामान्य Math कार्ये म्हणजे एखाद्या संख्येचे स्वरूप सुधारणे (cleaning up). JavaScript तुम्हाला चार rounding methods देते, आणि त्या सर्वांचे वर्तन सारखे नसते, विशेषतः जेव्हा संख्या धन क्षेत्राबाहेर (ऋण) असतात.
Math.abs(x) संख्येचे परिमाण (magnitude) परत करते. -42 पास केल्यास 42 मिळेल. जेव्हा तुम्हाला दिशेपेक्षा अंतराची (distance) जास्त काळजी असते, तेव्हा हे उपयुक्त ठरते. उदा. timestamps ची तुलना करणे, UI मध्ये drag deltas मोजणे किंवा एखादा अंदाज error margin मध्ये आहे की नाही हे तपासणे.
Math.round(x) हे शाळेत शिकवल्याप्रमाणे राऊंडिंग करते. हे जवळची पूर्णांक संख्या (nearest integer) घेते, आणि अर्ध्या (halves) संख्यांना पुढच्या धन पूर्णांकाकडे (positive integer) राऊंड करते. त्यामुळे 4.4 चे 4 आणि 4.5 चे 5 होते.
Math.ceil(x) नेहमी पुढच्या पूर्णांकाकडे वरच्या दिशेने (upward) राऊंड करते. 4.1 चे 5 होते आणि -4.9 चे -4 होते. शेवटचे उदाहरण लोकांना आश्चर्यचकित करते. कारण संख्यारेषेवर (number line) -4 हे -4.9 पेक्षा मोठे आहे, म्हणून ceiling ऋण संख्यांसाठी शून्याकडे (zero) सरकते.
Math.floor(x) हे त्याच्या अगदी उलट आहे. हे नेहमी खालच्या दिशेने (downward) राऊंड करते. 4.9 चे 4 होते आणि -4.1 चे -5 होते. जर तुम्ही search results चे pagination करत असाल किंवा fixed-size memory blocks वाटप करत असाल, तर सहसा तुम्हाला floor चीच गरज असते.
Math.trunc(x) दशांश भाग (decimal portion) पूर्णपणे काढून टाकते आणि फक्त पूर्णांक भाग ठेवते. परिणामी, ते चिन्हाचा (sign) विचार न करता शून्याकडे सरकते. 4.9 चे 4 होते आणि -4.9 चे -4 होते. जर तुम्ही अशा भाषांमधून logic पोर्ट करत असाल जिथे floats ला truncating द्वारे ints मध्ये रूपांतरित केले जाते, तर हे तुमच्यासाठी उपयुक्त आहे.
शेवटी, Math.sign(x) तुम्हाला सांगते की मूल्य शून्याच्या कोणत्या बाजूला आहे. हे धन संख्येसाठी 1, ऋण संख्येसाठी -1, positive zero साठी 0, negative zero साठी -0 आणि संख्या नसलेल्या (not a number) गोष्टींसाठी NaN परत करते. if-else chain न लिहिता दिशा ठरवण्यासाठी ही एक संक्षिप्त पद्धत आहे.
Generating Random Numbers
Math.random() 0 (समाविष्ट) ते 1 (वगळून) दरम्यान एक pseudo-random float तयार करते. हे cryptographically secure नाही, त्यामुळे पासवर्ड जनरेशन, token निर्मिती किंवा पैशांशी संबंधित कोणत्याही गोष्टीसाठी याचा वापर करू नका.
