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

C++ 斐波那契分數數列前 n 項和:避免整數除法導致精度丟失

     編輯:程式設計綜合問答

數列定義

分數項:2/1, 3/2, 5/3, 8/5, 13/8, ... 分子分母皆為斐波那契數列 F(n+2)/F(n+1)。

錯誤代碼


int a1=1, a2=2, a3=3;
double t = a3 / a2; // 整數除法 = 1,精度丟失

修正


double t = (double)a3 / (double)a2; // 強制浮點除法
// 或
double t = 1.0 * a3 / a2;

完整求和


double sum = 0;
long f1 = 1, f2 = 2; // F(2), F(3)
for (int i = 1; i <= n; ++i) {
    long f3 = f1 + f2;
    sum += (double)f3 / f2;
    f1 = f2; f2 = f3;
}

大 n 注意

long 64 位元可支援至 n≈90,超過需用 BigInteger 或高精度庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved