如何在 C 中計算平方根:使用 sqrt、應用與自訂演算法

1. 在 C 中計算平方根的方法:概觀與基本的 sqrt 函式

C 程式語言的標準函式庫中提供了 sqrt 函式,讓您可以輕鬆計算數值的平方根。這使得平方根的計算變得高效,避免了複雜的手動實作。本文將說明如何使用 sqrt 函式、探討各種應用情境,甚至示範如何自行實作演算法,適合從入門到進階的程式設計師閱讀。

2. 計算平方根的基本方法

首先說明在 C 中計算平方根的基本方法。

sqrt 函式的概觀與使用方式

sqrt 函式是 math.h 函式庫提供的函式之一,用來計算任意數值的平方根。函式原型如下:

#include <math.h>

double sqrt(double x);

此函式會回傳傳入參數 x 的平方根。

基本使用範例

以下是一個計算並印出使用者輸入數字平方根的程式範例。

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

int main() {
    double num;
    printf("Enter a number: ");
    scanf("%lf", &num);

    if (num < 0) {
        printf("Cannot compute square root of a negative number.n");
    } else {
        printf("Square root: %lfn", sqrt(num));
    }

    return 0;
}

在此程式中,使用者輸入一個數字,程式會計算並顯示其平方根。若輸入負數,則會顯示錯誤訊息並結束程式。

處理負數與重要注意事項

sqrt 函式不接受負數作為參數,傳入負數會導致錯誤。因此必須加入檢查輸入值是否為負數的邏輯。若需要計算負數(複數)的平方根,請使用 complex.h 函式庫中的 csqrt 函式。

3. 應用:平方根計算的各種使用情境

sqrt 函式在數值分析與科學計算中被廣泛使用。以下介紹幾個具代表性的應用範例。

計算歐氏距離

歐氏距離是指兩點在二維或三維空間中的距離,計算時會使用平方根。例如,在二維平面上,兩點 (x1, y1)(x2, y2) 的歐氏距離計算方式如下:

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

int main() {
    double x1 = 1.0, y1 = 2.0;
    double x2 = 4.0, y2 = 6.0;
    double distance = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
    printf("Euclidean distance: %lfn", distance);

    return 0;
}

在圖形程式設計中的應用

sqrt 函式也常用於計算向量的長度。例如,對於二維向量 (vx, vy),其長度的計算方式如下:

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

int main() {
    double vx = 3.0, vy = 4.0;
    double length = sqrt(vx * vx + vy * vy);
    printf("Vector length: %lfn", length);

    return 0;
}

複數的平方根

由於標準的 sqrt 函式無法處理複數的平方根,必須使用 complex.h 函式庫中的 csqrt 函式。以下是一段計算複數平方根的程式範例:

#include <stdio.h>
#include <complex.h>

int main() {
    double complex z = -4.0 + 0.0 * I;
    double complex result = csqrt(z);
    printf("Square root: %.2f + %.2fin", creal(result), cimag(result));

    return 0;
}

4. 不使用標準函式庫的平方根計算

也可以在不使用標準 sqrt 函式的情況下自行實作平方根演算法。以下示範使用牛頓法(Newton’s method)實作的範例。

使用牛頓法的自訂實作

牛頓法(Newton–Raphson 方法)是數值計算中廣為人知的技術,可用於求根,包括求平方根。以下是一個使用牛頓法計算平方根的範例。

#include <stdio.h>

double mySqrt(double num) {
    double x = num;
    double dx;

    if (num == 0) return 0;
    while (1) {
        dx = (x * x - num) / (2.0 * x);
        if (fabs(dx) < 0.00001) break;
        x -= dx;
    }

    return x;
}

int main() {
    double num = 9.0;
    printf("Square root: %lfn", mySqrt(num));

    return 0;
}

此程式碼使用牛頓法計算給定數字的平方根。它會持續迴圈直到滿足條件,逐步逼近解答。

5. 平方根計算的優點與限制

使用 sqrt 函式可帶來許多好處,但也必須了解其限制。

sqrt 函式的優勢

  • 由標準函式庫提供:不需額外安裝,與環境無關。
  • 效能:針對數值計算進行最佳化,處理速度快速。
  • 精度:對浮點運算保證準確性。

sqrt 函式的限制與因應措施

  • 負數限制:對負數求平方根會觸發錯誤。若需要計算複數的平方根,請使用 complex.h 中的 csqrt 函式。
  • 浮點精度:在計算極小或極大數值時,可能會產生誤差。此時需採取演算法上的調整。

6. 小結

本文說明了在 C 語言中如何計算平方根,從標準函式庫的 sqrt 函式說起,並介紹了歐氏距離與圖形程式設計等應用範例。亦說明了使用牛頓法自行實作平方根計算,涵蓋多種方法與其應用。

平方根的計算是 C 語言中最基本的數值處理工作之一,但其應用範圍相當廣泛。

年収訴求