2010-08-24 26 views
1

嗨所有我想格式化十進制A到分數B + C/D,其中某些限制是強加給D,說D可能是一個[2 ... 9]或[2 ... 19]等BCD是整數 目標是儘可能使格式化的分數接近小數。 有沒有一個現有的算法/理論呢? 或者我可以在Mac SDK上調用任何API嗎?我如何格式小數分數的分母極限

回答

0

看看持續的分數。

1
// Not tested or even compiled :-). Assumes you are handling sign 
// in: a - the decimal to convert 
//  limit - the largest denominator you will allow 
// out: outN - Numerator 
//  outD Denominator 

#include <math.h> 

void d2f(double a, int limit, int& outN, int& outD) { 
    double z; 
    int dPrev, d, n; 
    a = fabs(a); 
    z = a; 
    d = 1; 
    n = a; 
    dPrev = 0; 
    while (a - (double)(n/d) != 0 && z != floor(z)) { 
     z = 1/(z - floor(z)); 
     int tmp = d; 
     d = d * (int)floor(z) + dPrev; 
     if (d > limit) { 
      d = tmp; 
      break; 
     } 
     dPrev = tmp; 
     n = floor(a * d + 0.5); 
    } 
    outN = n; 
    outD = d; 
} 

希望幫助/工作:-)