2010-08-24 3 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; 
} 

희망 :-)

작동
관련 문제