1. जावा में त्रिकोणमितीय कार्य
जब हमने पहले राउंडिंग नंबरों का अध्ययन किया था, तो हम Math
कक्षा और उसकी कुछ विधियों से परिचित हुए थे। अब हम इस वर्ग को और अधिक विस्तार से देखेंगे।
जैसा कि नाम से पता चलता है, Math
कक्षा में प्रोग्रामर द्वारा सबसे अधिक बार उपयोग किए जाने वाले गणितीय कार्यों के तरीके शामिल हैं। यहाँ सबसे दिलचस्प हैं:
तरीका | विवरण | |
---|---|---|
|
d रेडियन में, कोण की ज्या लौटाता है |
|
|
d रेडियन में, कोण का कोज्या लौटाता है |
|
|
d रेडियन में कोण की स्पर्शरेखा लौटाता है |
|
|
आर्कसाइन लौटाता है | |
|
आर्ककोसाइन लौटाता है | |
|
चापस्पर्शज्या लौटाता है | |
|
हाइपरबोलिक साइन लौटाता है | |
|
हाइपरबोलिक कोसाइन लौटाता है | |
|
अतिशयोक्तिपूर्ण स्पर्शरेखा लौटाता है |
, और विधियां रेडियंस में व्यक्त कोण लेती हैं। एक कोण को डिग्री से रेडियन में बदलने के लिए और इसके विपरीत, वर्ग दो विशेष विधियों की पेशकश करता है:Math.sin()
Math.cos()
Math.tan()
Math
तरीका | विवरण |
---|---|
|
किसी कोण को डिग्री से रेडियन में बदलता है |
|
किसी कोण को रेडियन से डिग्री में बदलता है |
वैसे, विधियों के अलावा, कक्षा में दो स्थिर चर (कक्षा के स्थिर क्षेत्र) Math
भी होते हैं :
नियत | विवरण |
---|---|
|
"पाई" स्थिरांक किसके बराबर होता है?3.141592653589793 |
|
"ई" स्थिरांक के बराबर है2.718281828459045 |
ये सभी कार्य आपके लिए बहुत उपयोगी हो सकते हैं यदि आप अपने स्वयं के गेम लिखने, ग्राफिक्स के साथ काम करने या मानचित्र पर पथ की लंबाई की गणना करने का निर्णय लेते हैं।
उदाहरण के लिए, यदि आप गणना करना चाहते हैं sin(45°)
, तो यहां बताया गया है कि आप इसे कैसे करते हैं:
Math.sin( Math.toRadians(45) )
यहाँ एक उदाहरण है:
public class Main
{
public static int N = 10;
public static void drawValue(double y)
{
int value = (int) (y * N) + N;
for (int i = 0; i < 2 * N; i++)
{
char c = i == N ? '|': '.';
if (i == value)
c = '*';
System.out.print(c);
}
System.out.println();
}
public static void main(String[] args)
{
for (int i = 0; i < 10 * N; i++)
{
double x = i * 1.0 / N;
double y = Math.sin(x);
drawValue(y);
}
}
}
2. जावा में बीजगणितीय कार्य
ज्यादातर मामलों में, एक प्रोग्रामर के लिए हाई स्कूल गणित पर्याप्त होता है: यहां तक कि साइन और कोसाइन भी कोड में बहुत कम पाए जाते हैं। गेम, मैप या गेम इंजन के साथ काम करते समय अक्सर उनकी जरूरत होती है। 90% प्रोग्रामर इसका सामना कभी नहीं करते हैं।
लेकिन ज्यामिति के अलावा, प्रोग्रामर को कभी-कभी बीजगणितीय कार्यों का उपयोग करना पड़ता है। और, ज़ाहिर है, Math
कक्षा में सबसे आम हैं:
तरीका | विवरण |
---|---|
|
का वर्गमूलa |
|
का घन मूलa |
|
घातांक:ab |
|
घातीय (यूलर की संख्या एक शक्ति तक बढ़ी):ea |
|
का प्राकृतिक लघुगणक a :ln(a) |
|
आधार-10 का लघुगणक a :log10(a) |
|
का प्राकृतिक लघुगणक x + 1 :ln(x + 1) |
|
ex-1 |
यदि आप किसी संख्या का वर्गमूल या घनमूल चाहते हैं, तो sqrt(a)
और cbrt(a)
विधियाँ आपकी सेवा में हैं।
वर्गमूल की गणना निम्नानुसार की जा सकती है:
Math.sqrt(2)
यदि आप एक उच्च शक्ति की जड़ प्राप्त करना चाहते हैं, तो घातांक विधि का उपयोग करें: a
की शक्ति ¼
चौथी जड़ है, आदि।
Math.pow(2, 0.25)
लघुगणक और घातांक के लिए, log(a)
(प्राकृतिक लघुगणक) और exp(x)
(घातांक) विधियाँ हैं। आधार-10 लघुगणक की गणना करने के लिए, हमारे पास है log10(a)
।
यदि आप किसी संख्या के लघुगणक b
को आधार बनाना चाहते हैं a
, तो इस सरल सूत्र का उपयोग करें:loga(b) = ln(b) / ln(a)
उपयोगी तरीके
यदि आप के बहुत छोटे मानों वाली गणना कर रहे हैं x
, तो अंतिम दो कार्य - log1p()
और expm1()
- आपके लिए उपयोगी हो सकते हैं।
बहुत छोटे और बहुत बड़े चर जोड़ते समय double
, आप अक्सर पाएंगे कि बहुत छोटे मूल्यों को महत्वहीन के रूप में अनदेखा (त्याग) कर दिया जाता है। वास्तव में, यह तब होगा जब आप log()
और exp()
विधियों का उपयोग करेंगे। इसे हल करने के लिए, प्रोग्रामर ऐसे कार्यों के साथ आए जो केवल "छोटे महत्वपूर्ण भाग" को लौटाते हैं
उदाहरण:
मान लीजिए कि आप के प्राकृतिक लघुगणक की गणना करना चाहते हैं 1 + x
, जहां x
है । आप इस संख्या को विधि में आसानी से पास नहीं कर सकते हैं , क्योंकि यदि आप और जोड़ते हैं , तो आपको मिलता है । इतनी छोटी संख्या है कि संख्याओं को जोड़ने पर यह पूरी तरह से अलग हो जाएगी।10-20
log()
1
10-20
1
10-20
क्योंकि गणित में अक्सर के log()
करीब संख्याओं की गणना 1
करना शामिल होता है, प्रोग्रामर इस समस्या को हल करने का एक तरीका लेकर आए: संख्या को स्वयं विधि में पास करने के बजाय, केवल इसके अंतर को पास करें 1
।
3. न्यूनतम और अधिकतम
दो और उपयोगी कार्य हैं min(a, b)
और max(a, b)
। जैसा कि आप शायद पहले ही अनुमान लगा चुके हैं, पहला न्यूनतम दो नंबर देता है:
Math.min(a, b)
और दूसरा अधिकतम दो नंबर लौटाता है:
Math.max(a, b)
if
हमें इन कार्यों की आवश्यकता क्यों है जब आप हमेशा टर्नरी ऑपरेटर लिख सकते हैं या यहां तक कि उपयोग कर सकते हैं (a < b ? a: b)
?
यह कोड की पठनीयता के बारे में है। कभी-कभी आपका कोड if
स्टेटमेंट्स से ओवरलोड हो जाता है और आप अधिक कॉम्पैक्ट नोटेशन का उपयोग करना चाहते हैं। आइए तुलना करें:
कोड | विवरण |
---|---|
|
एक if-else कथन का उपयोग करना (इसे लिखने का सबसे लंबा तरीका) |
|
टर्नरी ऑपरेटर का उपयोग करना विपक्ष: - भारी कोड - गणना दो बार की जाती है |
|
इसे लिखने का यह एक शानदार तरीका है, लेकिन यह थोड़ा बेमानी है |
|
बिल्कुल सही 🙂 |
4. न्यूनतम और अधिकतम कई संख्याएँ
min()
और max()
विधियों का उपयोग करने का एक और शानदार तरीका है ।
कई संख्याओं या चरों के न्यूनतम (या अधिकतम) की गणना करने के लिए। इन विधियों में नेस्टेड कॉल करना बहुत सुविधाजनक है।
यहां बताया गया है कि न्यूनतम 3 संख्याएं कैसे ज्ञात करें:
Math.min(a, Math.min(b, c))
तो क्या हुआ? यह बेहद सुविधाजनक है: न्यूनतम दो संख्याओं की गणना करें, और फिर इस संख्या का न्यूनतम और तीसरी संख्या वापस करें।
न्यूनतम चार संख्याएँ इसी प्रकार प्राप्त होती हैं:
Math.min(a, Math.min(b, Math.min(с, d)))
उस ने कहा, हम इस सूत्र को थोड़ा और स्पष्ट रूप से लिख सकते हैं:
Math.min(Math.min(a, b), Math.min(c, d))
max()
यह सब विधि के लिए समान काम करता है ।
if-else
ऑपरेटर या टर्नरी ऑपरेटर का उपयोग करने से ये कोड स्निपेट थोड़े अधिक बोझिल हो जाएंगे। लेकिन min()
और max()
विधियों का उपयोग करना एकदम सही है।
GO TO FULL VERSION