C भाषा math.h पूर्ण गाइड | मुख्य कार्य, प्रयोग, उदाहरण

目次

1. परिचय

math.h के हो?

C भाषा मा गणितीय गणनालाई समर्थन गर्ने मानक पुस्तकालय math.h उपलब्ध छ। यो पुस्तकालय प्रयोग गरेर, त्रिकोणीय फलन, घातांक-लघुगणक गणना, वर्गमूल, निरपेक्ष मान गणना आदि विभिन्न गणितीय अपरेसनहरू गर्न सकिन्छ।

math.h प्रयोग गर्ने फाइदाहरू

  • गणितीय गणनालाई सरल कार्यहरूद्वारा कार्यान्वयन गर्न सकिन्छ
  • उच्च शुद्धताको गणना सजिलै कार्यान्वयन गर्न सम्भव
  • मानक पुस्तकालय भएकाले अतिरिक्त स्थापना आवश्यक छैन

math.h प्रयोग गर्नको लागि इन्क्लुड गर्ने तरिका

math.h प्रयोग गर्न, प्रोग्रामको सुरुमा तलको जस्तै #include निर्देश लेख्नुहोस्।

#include <stdio.h>
#include <math.h>

अर्को, math.h को कार्यहरू प्रयोग गर्दा, कम्पाइल गर्दा -lm विकल्प थप्न आवश्यक हुन्छ। उदाहरणका लागि, GCC प्रयोग गर्दा तलको जस्तै कम्पाइल गर्नुहोस्।

gcc program.c -o program -lm

math.h को मुख्य प्रयोगहरू

math.h तलका प्रयोगहरूमा प्रयोग गरिन्छ।

  1. त्रिकोणीय फलन प्रयोग गरेर कोण गणना
  2. घातांक-लघुगणक प्रयोग गरेर संख्यात्मक गणना
  3. वर्गमूल गणना
  4. संख्याको गोलाई प्रक्रिया
  5. निरपेक्ष मान गणना

2. प्रयोग अनुसार math.h को मुख्य कार्यहरू

2.1 त्रिकोणमितीय फलन(कोण गणना)

त्रिकोणमितीय फलनहरू वृत्त र त्रिकोणको गणनामा प्रयोग गरिन्छ, भौतिक सिमुलेशन र ग्राफिक्स प्रोसेसिङ जस्ता विभिन्न क्षेत्रहरूमा उपयोगी छन्।

sin()cos()tan() को सारांश

यी फलनहरू क्रमशः साइन(sine)、कोसाइन(cosine)、ट्यान्जेन्ट(tangent) गणना गर्न प्रयोग गरिन्छ।

#include <stdio.h>
#include <math.h>

int main() {
    double angle = 3.14159 / 4; // 45 डिग्री (रेडियन)
    printf("sin(45°) = %f
", sin(angle));
    printf("cos(45°) = %f
", cos(angle));
    printf("tan(45°) = %f
", tan(angle));
    return 0;
}

कार्य परिणाम

sin(45°) = 0.707107
cos(45°) = 0.707107
tan(45°) = 1.000000

ध्यान दिनु पर्ने बुँदाहरू

  • math.h को त्रिकोणमितीय फलनहरू र्याडियन लाई इनपुटको रूपमा लिन्छ। डिग्री इकाइको मान प्रयोग गर्न चाहनुहुन्छ भने, (कोण × π / 180) को रूपान्तरण आवश्यक छ।
double degrees = 45.0;
double radians = degrees * M_PI / 180.0;

2.2 उल्टो त्रिकोणमितीय फलन(कोण पत्ता लगाउने)

उल्टो त्रिकोणमितीय फलनहरू दिइएको अनुपातबाट कोण पत्ता लगाउन प्रयोग गरिन्छ।

asin()acos()atan()atan2() को सारांश

  • asin(x): x को उल्टो साइन(आर्कसाइन)लाई फिर्ता गर्छ(-π/2 – π/2)
  • acos(x): x को उल्टो कोसाइन(आर्ककोसाइन)लाई फिर्ता गर्छ(0 – π)
  • atan(x): x को उल्टो ट्यान्जेन्ट(आर्कट्यान्जेन्ट)लाई फिर्ता गर्छ(-π/2 – π/2)
  • atan2(y, x): y/x को आर्कट्यान्जेन्टलाई फिर्ता गर्छ(सबै चतुर्थांशमा लागू)
#include <stdio.h>
#include <math.h>

int main() {
    double value = 0.5;

    printf("asin(0.5) = %f radians
", asin(value));
    printf("acos(0.5) = %f radians
", acos(value));
    printf("atan(1.0) = %f radians
", atan(1.0));
    printf("atan2(1.0, 1.0) = %f radians
", atan2(1.0, 1.0));

    return 0;
}

ध्यान दिनु पर्ने बुँदाहरू

  • asin()acos() का आर्गुमेन्टहरू -1.0 देखि 1.0 को दायरा भित्र हुनुपर्छ। यस बाहिरको मान पास गर्दा NaN(असंख्य)फिर्ता हुन्छ।

2.3 घातांक・लघुगणक फलन(घातांक गणना・लॉग गणना)

घातांक र लघुगणकको गणना डेटा विश्लेषण, सांख्यिकी, मेसिन लर्निङ आदि मा व्यापक रूपमा प्रयोग हुन्छ।

exp()log()log10() को सारांश

  • exp(x): e^x गणना
  • log(x): प्राकृतिक लघुगणक(ln x)गणना(आधार e)
  • log10(x): सामान्य लघुगणक(आधार 10)
#include <stdio.h>
#include <math.h>

int main() {
    double x = 2.0;

    printf("exp(2.0) = %f
", exp(x));
    printf("log(10.0) = %f
", log(10.0));
    printf("log10(100.0) = %f
", log10(100.0));

    return 0;
}

कार्य परिणाम

exp(2.0) = 7.389056
log(10.0) = 2.302585
log10(100.0) = 2.000000

ध्यान दिनु पर्ने बुँदाहरू

  • log() मा 0 वा नकारात्मक मान पास गर्दा NaN हुन्छ(उदाहरण:log(0.0))。
  • exp(x) मा ठूलो मान पास गर्दा ओभरफ्लो हुन सक्छ।

2.4 घातांक・वर्गमूल(संख्यात्मक गणना)

घातांक र वर्गमूलको गणना धेरै गणितीय एल्गोरिदममा आधारभूत प्रक्रिया हो।

pow()sqrt() को सारांश

  • pow(x, y): x^y(x को y घात)गणना
  • sqrt(x): x को वर्गमूल गणना
#include <stdio.h>
#include <math.h>

int main() {
    double x = 9.0;

    printf("pow(2, 3) = %f
", pow(2.0, 3.0));
    printf("sqrt(9.0) = %f
", sqrt(x));

    return 0;
}

ध्यान दिनु पर्ने बुँदाहरू

  • pow(x, y) मा y लाई 0.5 निर्दिष्ट गरेर वर्गमूलको गणना पनि गर्न सकिन्छ(pow(9.0, 0.5) = 3.0)。
  • sqrt(x) मा नकारात्मक मान पास गर्दा NaN हुन्छ।

2.5 संख्यात्मक प्रक्रिया(राउन्डिङ・परम मान)

संख्यालाई पूर्णांकमा राउन्ड गर्ने वा परम मान निकाल्ने फलनहरू रकम गणना र पूर्णांक प्रक्रिया मा महत्त्वपूर्ण छन्।

fabs()ceil()floor()round() को सारांश

  • fabs(x): x को परम मान निकाल्छ
  • ceil(x): x लाई माथि तिर राउन्ड गर्छ(दशमलव भाग माथि तिर)
  • floor(x): x लाई तल तिर राउन्ड गर्छ(दशमलव भाग तल तिर)
  • round(x): x लाई नजिकको पूर्णांकमा गोलो बनाउँछ
#include <stdio.h>
#include <math.h>

int main() {
    double num = -5.7;

    printf("fabs(-5.7) = %f
", fabs(num));
    printf("ceil(-5.7) = %f
", ceil(num));
    printf("floor(-5.7) = %f
", floor(num));
    printf("round(-5.7) = %f
", round(num));

    return 0;
}

कार्य परिणाम

fabs(-5.7) = 5.700000
ceil(-5.7) = -5.000000
floor(-5.7) = -6.000000
round(-5.7) = -6.000000
年収訴求

3. math.h को प्रयोग र ध्यान दिनुपर्ने बुँदाहरू

3.1 math.h प्रयोग गर्दा कम्पाइल विकल्प

math.h प्रयोग गर्दा, धेरै C कम्पाइलरहरूमा गणित लाइब्रेरी(libm)लाई स्पष्ट रूपमा लिंक गर्न आवश्यक हुन्छ।

GCC मा कम्पाइल गर्ने तरिका

GCC प्रयोग गर्दा, -lm विकल्प निर्दिष्ट नगरेमा, गणितीय कार्यहरू समावेश गर्ने प्रोग्राम सही रूपमा लिंक हुँदैन, र तल देखाइएका जस्ता त्रुटिहरू उत्पन्न हुन सक्छ।

undefined reference to `sin'

यो समस्या टार्नको लागि, तल देखाइअनुसार -lm विकल्प थपेर कम्पाइल गर्नुहोस्।

gcc program.c -o program -lm

Clang र MSVC को अवस्थामा

  • Clang मा पनि -lm विकल्प आवश्यक हुन सक्छ (पर्यावरण अनुसार)।
  • Microsoft Visual Studio(MSVC)मा -lm निर्दिष्ट नगरे पनि math.h को कार्यहरू प्रयोग गर्न सकिन्छ।

3.2 फ्लोटिंग पोइन्टको शुद्धता र त्रुटि सम्बन्धी ध्यान

math.h मा समावेशित गणितीय कार्यहरू फ्लोटिंग पोइन्ट गणना(IEEE 754 मानक) प्रयोग गर्ने कारणले, शुद्धताको त्रुटि उत्पन्न हुन सक्छ।

फ्लोटिंग पोइन्टको त्रुटि के हो?

फ्लोटिंग पोइन्ट संख्याहरू आन्तरिक रूपमा नजिकको मान द्वारा व्यक्त गरिन्छ, त्यसैले सटीक मान राख्न सकिँदैन। त्यसकारण, गणनाको परिणाममा सानो त्रुटि उत्पन्न हुन सक्छ।

त्रुटिको विशिष्ट उदाहरण

#include <stdio.h>
#include <math.h>

int main() {
    double x = 0.1;
    double y = 0.2;
    double z = 0.3;

    if ((x + y) == z) {
        printf("Equaln");
    } else {
        printf("Not Equaln");
    }

    return 0;
}

आउटपुट

Not Equal

यसरी, 0.1 + 0.2 ले सटीक रूपमा 0.3 नहुनु हुने केसहरू उत्पन्न हुन्छ।

फ्लोटिंग पोइन्टको त्रुटि विचार गरी तुलना

त्रुटि विचार गर्दा थ्रेसहोल्ड(इप्सिलन) सेट गरेर तुलना गरिन्छ।

#include <stdio.h>
#include <math.h>

#define EPSILON 1e-9

int main() {
    double x = 0.1, y = 0.2, z = 0.3;

    if (fabs((x + y) - z) < EPSILON) {
        printf("Approximately Equaln");
    } else {
        printf("Not Equaln");
    }

    return 0;
}

आउटपुट

Approximately Equal

3.3 math.h को त्रुटि ह्यान्डलिंग

math.h का कार्यहरू मध्ये, अवैध तर्क प्रदान गर्दा त्रुटि उत्पन्न हुने छन्। यस्तो अवस्थामा, उपयुक्त रूपमा त्रुटि प्रक्रिया गर्न आवश्यक छ।

त्रुटि उत्पन्न हुने उदाहरण

  • sqrt(-1.0)NaN(असंख्य)
  • log(0.0)-inf(नकारात्मक अनन्त)
  • 1.0 / 0.0inf(सकारात्मक अनन्त)

errno प्रयोग गरेर त्रुटि ह्यान्डलिंग

#include <stdio.h>
#include <math.h>
#include <errno.h>

int main() {
    errno = 0; // errno रीसेट गर्नुहोस्
    double result = sqrt(-1.0); 

    if (errno != 0) {
        perror("गणना त्रुटि भयो");
    } else {
        printf("परिणाम: %fn", result);
    }

    return 0;
}

errno का मुख्य त्रुटि कोड

त्रुटि कोडअर्थ
EDOMगणितीय कार्यमा अवैध मान पास गरियो(उदाहरण: sqrt(-1.0))
ERANGEपरिणाम अभिव्यक्त गर्न सकिने दायरा भन्दा बाहिर(उदाहरण: exp(1000.0))

3.4 math.h को प्रयोगमा सर्वोत्तम अभ्यास

  • कम्पाइल गर्दा -lm विकल्प थप्नुहोस्
  • फ्लोटिंग पोइन्टको त्रुटि विचार गरी, तुलना गर्दा थ्रेसहोल्ड प्रयोग गर्नुहोस्
  • अवैध इनपुट मान पास गरिएमा त्रुटि ह्यान्डलिंग गर्नुहोस्
  • ओभरफ्लो/अन्डरफ्लो नहुन जाँच गर्नुहोस्
  • गणनाको परिणाम NaN वा inf छैन भनि जाँच गर्नुहोस्

4. FAQ(सामान्य प्रश्नहरू)

4.1 math.h को कार्यमा त्रुटि उत्पन्न भएमा समाधान के हो?

समस्याको उदाहरण

#include <stdio.h>
#include <math.h>

int main() {
    double result = sqrt(-1.0);
    printf("sqrt(-1.0) = %fn", result);
    return 0;
}

आउटपुट

sqrt(-1.0) = nan

यसरी, नकारात्मक संख्याको वर्गमूल खोज्दा NaN(Not a Number) फिर्ता हुन्छ।

उपाय

  • इनपुट मानलाई पूर्व जाँच गरी, अमान्य मान नआउने गरी बनाउनु।
  • errno लाई प्रयोग गरी त्रुटि पत्ता लगाउनु।
#include <stdio.h>
#include <math.h>
#include <errno.h>

int main() {
    errno = 0;
    double result = sqrt(-1.0);

    if (errno == EDOM) {
        printf("त्रुटि: अवैध इनपुट मान n");
    } else {
        printf("sqrt(-1.0) = %fn", result);
    }

    return 0;
}

4.2 math.h प्रयोग गर्दा आवश्यक कम्पाइल विकल्प के हो?

C भाषा को math.h ले गणित पुस्तकालय(libm) मा निर्भर गर्दछ।
त्यसैले, GCC लाई प्रयोग गरेर कम्पाइल गर्दा -lm विकल्प थप्न आवश्यक छ।

कम्पाइल विधि

gcc program.c -o program -lm

विकल्प निर्दिष्ट नगरे के हुन्छ?

GCC मा -lm नलगाएर math.h को कार्य प्रयोग गर्दा, तलको जस्तै 「undefined reference」 त्रुटि उत्पन्न हुन्छ।

/tmp/ccxlj3hs.o: In function `main':
program.c:(.text+0x15): undefined reference to `sin'
collect2: error: ld returned 1 exit status

4.3 math.h प्रयोग गर्दा कार्यको शुद्धता कति हुन्छ?

math.h ले IEEE 754 मानक मा आधारित फ्लोटिङ पोइन्ट संख्याहरू प्रयोग गर्दछ, र गणनाको शुद्धतामा सीमा हुन्छ।

समस्याको उदाहरण

#include <stdio.h>
#include <math.h>

int main() {
    double x = 0.1, y = 0.2;
    double z = x + y;

    if (z == 0.3) {
        printf("समानn");
    } else {
        printf("भिन्नn");
    }

    return 0;
}

आउटपुट

भिन्न

उपाय

फ्लोटिङ पोइन्ट संख्याको तुलना गर्दा त्रुटिको स्वीकृत सीमा(EPSILON)लाई विचार गर्न आवश्यक छ।

#include <stdio.h>
#include <math.h>

#define EPSILON 1e-9

int main() {
    double x = 0.1, y = 0.2, z = 0.3;

    if (fabs((x + y) - z) < EPSILON) {
        printf("लगभग बराबर n");
    } else {
        printf("भिन्न n");
    }

    return 0;
}

आउटपुट

लगभग बराबर

4.4 math.h को कार्यलाई पूर्णांक प्रकारमा पनि प्रयोग गर्न सकिन्छ?

math.h को कार्यले फ्लोटिङ पोइन्ट प्रकार(double लाई आर्गुमेन्टको रूपमा मान्दछ।
त्यसैले, पूर्णांक पास गर्दा स्वचालित रूपमा double मा रूपान्तरण हुन्छ।

समस्याको उदाहरण

#include <stdio.h>
#include <math.h>

int main() {
    int x = 4;
    printf("sqrt(4) = %fn", sqrt(x));
    return 0;
}

उपाय

स्पष्ट रूपमा प्रकार रूपान्तरण गरेर, अनपेक्षित व्यवहारलाई रोक्न सकिन्छ।

#include <stdio.h>
#include <math.h>

int main() {
    int x = 4;
    double result = sqrt((double)x); // स्पष्ट प्रकार परिवर्तन
    printf("sqrt(4) = %fn", result);
    return 0;
}

4.5 math.h मा परिभाषित गरिएको π को स्थिरांक छ?

C99 पछिको मानकमा, math.h मा π को स्थिरांक M_PI परिभाषित गरिएको छ।

प्रयोग उदाहरण

#include <stdio.h>
#include <math.h>

int main() {
    printf("π = %.15fn", M_PI);
    return 0;
}

आउटपुट

π = 3.141592653589793

M_PI प्रयोग गर्न नसकेको अवस्थामा

केही कम्पाइलरहरू वा पुराना वातावरणहरूमा M_PI परिभाषित नभएको हुन सक्छ। त्यस अवस्थामा आफैं परिभाषित गर्न आवश्यक छ।

#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif

5. math.h को प्रयोग: व्यावहारिक उदाहरण

5.1 भौतिक सिमुलेशनमा प्रयोग

1. वस्तुको पतन गति(स्वतन्त्र पतनको गणना)

#include <stdio.h>
#include <math.h>

#define G 9.81  // गुरुत्वाकर्षण त्वरण

int main() {
    double time = 3.0;  // 3 सेकेन्डको पतन
    double distance = 0.5 * G * pow(time, 2);

    printf("वस्तु %.2f सेकेन्ड पछि %.2f मीटर पड्छ।n", time, distance);
    return 0;
}

आउटपुट

वस्तु 3.00 सेकेन्ड पछि 44.15 मिटर गिर्‍नेछ。

5.2 सांख्यिकीय विश्लेषणमा प्रयोग

मानक विचलनको गणना

#include <stdio.h>
#include <math.h>

double mean(double data[], int size) {
    double sum = 0.0;
    for (int i = 0; i < size; i++) {
        sum += data[i];
    }
    return sum / size;
}

double standardDeviation(double data[], int size) {
    double avg = mean(data, size);
    double sum = 0.0;
    for (int i = 0; i < size; i++) {
        sum += pow(data[i] - avg, 2);
    }
    return sqrt(sum / size);
}

int main() {
    double dataset[] = {10.0, 20.0, 30.0, 40.0, 50.0};
    int size = sizeof(dataset) / sizeof(dataset[0]);

    printf("मानक विचलन: %.2fn", standardDeviation(dataset, size));
    return 0;
}

आउटपुट

मानक विचलन: 14.14

5.3 खेल विकासमा प्रयोग

2D खेलमा पात्रको कोण गणना

#include <stdio.h>
#include <math.h>

int main() {
    double playerX = 1.0, playerY = 1.0;
    double enemyX = 4.0, enemyY = 5.0;

    double angle = atan2(enemyY - playerY, enemyX - playerX) * 180.0 / M_PI;

    printf("शत्रुको दिशा: %.2f डिग्रीn", angle);
    return 0;
}

आउटपुट

शत्रुको दिशा: 45.00 डिग्री

3D खेलमा टकराव निर्धारण

#include <stdio.h>
#include <math.h>

int main() {
    double obj1[3] = {1.0, 2.0, 3.0};  // वस्तु १ को समन्वय
    double obj2[3] = {4.0, 6.0, 3.0};  // वस्तु २ को समन्वय
    double distance;

    distance = sqrt(pow(obj2[0] - obj1[0], 2) +
                    pow(obj2[1] - obj1[1], 2) +
                    pow(obj2[2] - obj1[2], 2));

    printf("वस्तुहरू बीचको दूरी: %.2fn", distance);
    return 0;
}

आउटपुट

वस्तुहरू बीचको दूरी: 5.00

6. सारांश

6.1 math.h का मुख्य बुँदाहरू

  1. math.h को मूल
  • C भाषा को मानक पुस्तकालय हो, र गणितीय गणनामा प्रयोग गरिन्छ।
  • #include लाई प्रोग्रामको सुरुमा घोषणा गर्न आवश्यक छ।
  1. कम्पाइल गर्दा ध्यान दिनुपर्ने बुँदाहरू
  • math.h को कार्यहरू प्रयोग गर्दा, GCC मा -lm विकल्प आवश्यक हुन्छ।
   gcc program.c -o program -lm
  1. उपयोग अनुसारका मुख्य कार्यहरू
  • त्रिकोणीय कार्यहरू(sin, cos, tan) → कोणको गणना
  • उल्टो त्रिकोणीय कार्यहरू(asin, acos, atan, atan2) → कोणको प्राप्ति
  • घातांक र लघुगणक(exp, log, log10) → घातांक र लघुगणक गणना
  • घातांक र वर्गमूल(pow, sqrt) → घातांक र वर्गमूल
  • संख्यात्मक प्रक्रिया(fabs, ceil, floor, round) → निरपेक्ष मान र गोलाई प्रक्रिया
  1. सटीकता र त्रुटिको विचार
  • math.h को कार्यहरू फ्लोटिङ पोइन्ट गणना(IEEE 754 मानक) प्रयोग गर्ने कारणले, सटीकता त्रुटि उत्पन्न हुन्छ।
#define EPSILON 1e-9
   if (fabs(a - b) < EPSILON) { /* लगभग बराबर मानिन्छ */ }
  1. त्रुटि ह्यान्डलिङ
  • अवैध इनपुट(उदाहरण: sqrt(-1.0), log(0.0))पास गर्दा NaN वा inf हुन सक्छ।
errno = 0;
   double result = sqrt(-1.0);
   if (errno != 0) {
       perror("त्रुटि उत्पन्न");
   }
  1. व्यावहारिक उदाहरण
  • भौतिक सिमुलेशन → पतन गति र प्रक्षेपण गति को गणना
  • सांख्यिकीय विश्लेषण → मानक विचलनको गणना
  • गेम विकास → शत्रुको दिशा गणना(atan2())र टकराव जाँच(sqrt()

6.2 math.h अध्ययन गर्नका लागि सन्दर्भ लिङ्कहरू

यदि तपाईं math.h बारे गहिरो रूपमा सिक्न चाहनुहुन्छ भने, तलका स्रोतहरू प्रयोग गर्नु राम्रो हुनेछ।

6.3 अन्तिम अध्ययन चरणहरू

  1. मूलभूत कार्यहरू प्रयास गर्नु
  • sqrt(), pow(), sin(), cos() जस्ता कार्यहरू प्रयोग गरेर सरल प्रोग्राम बनाउनु।
  1. त्रुटि ह्यान्डलिङलाई विचार गरी कोड लेख्नु
  • errno प्रयोग गरेर, अवैध इनपुटको व्यवहार बुझ्नु।
  1. व्यावहारिक प्रोग्राम बनाउनु
  • गेम विकास वा डेटा विश्लेषण जस्ता विशिष्ट परियोजनाहरूमा math.h प्रयोग गर्नु।

अन्तिम सारांश

math.h C भाषाको मानक पुस्तकालयको रूपमा, धेरै गणितीय कार्यहरू प्रदान गर्दछ।
उचित प्रयोग बुझेर, सटीकता त्रुटि र त्रुटि ह्यान्डलिङलाई विचार गरेर, अझ सुरक्षित र सही गणितीय गणना गर्न सकिन्छ
कृपया, वास्तविक प्रोग्राममा math.h प्रयोग गरी, अझ उन्नत C प्रोग्रामिङमा चुनौती दिनुहोस्।

年収訴求