C語言根號運算全攻略:sqrt、cbrt、pow 函數與牛頓法實作範例

1. 前言

在 C 語言中,根號運算(如平方根、立方根)是數值分析與幾何計算中不可或缺的重要元素。本文將詳細介紹如何在 C 語言中進行根號運算,從基礎到進階應用一應俱全。您將學會 sqrt 函數的用法、牛頓法的實作,以及如何利用 pow 函數計算任意次方根,並搭配實際程式碼範例,讓您能輕鬆上手。

2. C 語言中的根號運算基礎

math.h 標準函式庫

在 C 語言中,如需使用數學相關函數,需包含標準函式庫 math.h。此函式庫內建多種數學函數,例如計算平方根的 sqrt、計算立方根的 cbrt 等。使用這些函數時,請務必在程式最上方加入 #include <math.h>,以便引用函式庫。

3. 使用 sqrtcbrt 函數計算根號

平方根 (sqrt)

sqrt 函數可計算所指定數值的平方根。此函數參數需為非負數,並以 double 型態傳回結果。以下程式碼範例示範如何使用 sqrt 計算平方根:

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

int main(void) {
    double num = 16.0;
    double result = sqrt(num);
    printf("數值 %.2f 的平方根是 %.2f。
", num, result);
    return 0;
}

此程式將 16.0 賦值給 num,計算其平方根並輸出。結果會顯示為「數值 16.00 的平方根是 4.00。」

立方根 (cbrt)

cbrt 函數可計算數值的立方根。cbrt 可處理負數,非常適合用於計算負數的立方根。以下程式碼範例會計算 0 到 9 的立方根,並將立方根再三次方還原為原始值:

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

int main(void) {
    for (double x = 0.0; x < 10.0; x+=1.0) {
        double ans = cbrt(x);
        printf("%f : %f
", x, ans * ans * ans);
    }
    return 0;
}

4. 使用牛頓法計算根號

牛頓法簡介

牛頓法(Newton’s Method)是一種求方程式根的迭代算法,常用於計算平方根或其他開根號。當無法直接使用 sqrt 函數,或需要更高自訂性的運算時,牛頓法十分實用。

實作範例

以下程式碼展示如何利用牛頓法計算平方根:

#include <stdio.h>

int main(void) {
    double x, y, n;
    printf("請輸入一個數字: 
");
    scanf("%lf", &n);

    x = 1;
    while(1) {
        x = x - (x * x - n) / (2 * x);
        y = x * x - n;
        if ((y <= 0.00000001) && (y >= -0.00000001)) {
            break;
        }
    }
    printf("sqrt(%lf) = %lf
", n, x);
    return 0;
}

本程式會請用戶輸入數字,並以牛頓法計算其平方根。

5. 用 pow 函數計算任意次方根

pow 函數用法

pow 函數用於計算指定數值的次方。利用此函數,除了平方根、立方根外,也能求任意次方根。例如,計算平方根時,指數可設為 0.5。

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

int main(void) {
    for(int i = 0; i < 5; i++) {
        printf("%d 的平方根是 %lf
", i + 1, pow(i + 1, 0.5));
    }
    return 0;
}

本程式將計算 1 至 5 的平方根並輸出。

6. C 語言根號運算的應用

實務應用場景

根號運算廣泛應用於幾何問題、統計分析等情境。例如,計算兩點間距離、由變異數計算標準差時,常需用到平方根。

錯誤處理

進行根號運算時,若參數為負數需特別注意。sqrt 遇到負數會回傳錯誤,但 cbrt 則可正確處理負數。若需計算負數的平方根,務必先進行錯誤檢查與適當處理。

7. 總結

本文介紹了在 C 語言中計算根號的多種方法,從 sqrtcbrt 等基本用法到牛頓法自訂計算,以及用 pow 計算任意次方根,都搭配實際程式碼範例說明。根號運算是解決多種實務問題的重要技能,希望這篇文章能幫助您更有效率地掌握相關技巧。