1. जावा में त्रिकोणमितीय कार्य

जब हमने पहले राउंडिंग नंबरों का अध्ययन किया था, तो हम Mathकक्षा और उसकी कुछ विधियों से परिचित हुए थे। अब हम इस वर्ग को और अधिक विस्तार से देखेंगे।

जैसा कि नाम से पता चलता है, Mathकक्षा में प्रोग्रामर द्वारा सबसे अधिक बार उपयोग किए जाने वाले गणितीय कार्यों के तरीके शामिल हैं। यहाँ सबसे दिलचस्प हैं:

तरीका विवरण
double sin(double d)
dरेडियन में, कोण की ज्या लौटाता है
double cos(double d)
dरेडियन में, कोण का कोज्या लौटाता है
double tan(double d)
dरेडियन में कोण की स्पर्शरेखा लौटाता है
double asin(double d)
आर्कसाइन लौटाता है
double acos(double d)
आर्ककोसाइन लौटाता है
double atan(double d)
चापस्पर्शज्या लौटाता है
double sinh(double d)
हाइपरबोलिक साइन लौटाता है
double cosh(double d)
हाइपरबोलिक कोसाइन लौटाता है
double tanh(double d)
अतिशयोक्तिपूर्ण स्पर्शरेखा लौटाता है

, और विधियां रेडियंस में व्यक्त कोण लेती हैं। एक कोण को डिग्री से रेडियन में बदलने के लिए और इसके विपरीत, वर्ग दो विशेष विधियों की पेशकश करता है:Math.sin()Math.cos()Math.tan()Math

तरीका विवरण
double toRadians(double angdeg)
किसी कोण को डिग्री से रेडियन में बदलता है
double toDegrees(double angrad)
किसी कोण को रेडियन से डिग्री में बदलता है

वैसे, विधियों के अलावा, कक्षा में दो स्थिर चर (कक्षा के स्थिर क्षेत्र) Mathभी होते हैं :

नियत विवरण
double Math.PI
"पाई" स्थिरांक किसके बराबर होता है?3.141592653589793
double Math.E
"ई" स्थिरांक के बराबर है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कक्षा में सबसे आम हैं:

तरीका विवरण
double sqrt(double a)
का वर्गमूलa
double cbrt(double a)
का घन मूलa
double pow(double a, double b)
घातांक:ab
double exp(double a)
घातीय (यूलर की संख्या एक शक्ति तक बढ़ी):ea
double log(double a)
का प्राकृतिक लघुगणक a:ln(a)
double log10(double a)
आधार-10 का लघुगणक a:log10(a)
double log1p(double x)
का प्राकृतिक लघुगणक x + 1:ln(x + 1)
double expm1(double x)
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-20log()110-20110-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स्टेटमेंट्स से ओवरलोड हो जाता है और आप अधिक कॉम्पैक्ट नोटेशन का उपयोग करना चाहते हैं। आइए तुलना करें:

कोड विवरण
int x = 0;
if (x-5+y*20 < x*x+y*y)
   x = x-5+y*20;
else
   x = x*x+y*y;
एक if-elseकथन का उपयोग करना (इसे लिखने का सबसे लंबा तरीका)
int x = x-5+y*20 < x*x+y*y ? x-5+y*20 : x*x+y*y;
टर्नरी ऑपरेटर का उपयोग करना विपक्ष:
- भारी कोड
- गणना दो बार की जाती है
int a = x-5+y*20;
int b = x*x+y*y;
int x = a < b ? a : b;
इसे लिखने का यह एक शानदार तरीका है, लेकिन यह थोड़ा बेमानी है
int x = Math.min(x-5+y*20, x*x+y*y);
बिल्कुल सही 🙂

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()विधियों का उपयोग करना एकदम सही है।