首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言冪運算實現:Z=13.65*(1.0063)^k 手寫pow算法

     編輯:C 語言問答

指數運算手寫實現

題目:計算 Z = 13.65 × (1.0063)^k,不使用 math.h 的 pow()。

遞歸/迭代實現


#include 

double power(double base, int exp) {
    double result = 1.0;
    if (exp < 0) {
        base = 1.0 / base;
        exp = -exp;
    }
    while (exp > 0) {
        if (exp & 1) result *= base;  // 快速冪優化
        base *= base;
        exp >>= 1;
    }
    return result;
}

int main() {
    int k;
    printf("輸入 k: ");
    scanf("%d", &k);
    double z = 13.65 * power(1.0063, k);
    printf("Z = %.6f\n", z);
    return 0;
}

簡化版:正整數指數循環相乘


double z = 13.65;
if (k > 0) {
    for (int i = 0; i < k; i++)
        z *= 1.0063;
} else if (k < 0) {
    for (int i = 0; i < -k; i++)
        z /= 1.0063;
}

快速冪算法解析

時間複雜度 O(log k) vs 線性 O(k):

k=13 (1101二進制)
result=1, base=1.0063
exp=13: odd → result*=base (1.0063), base^=2 (1.0126), exp=6
exp=6:  even → base^=2 (1.0253), exp=3
exp=3:  odd → result*=base (1.0379), base^=2 (1.0513), exp=1
exp=1:  odd → result*=base (1.0910), base^=2, exp=0
1.0063^13 ≈ 1.0910

精度考量

  • double 約 15-17 位有效數字,足夠一般金融計算
  • 大指數可能溢出/下溢,需對數域計算:exp(k * log(base))
  • 金融級精度建議用定點數或十進制浮點庫 (如 decNumber)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved