2014-04-07 2 views
0

함수를 벡터로 반환하려고합니다. 함수 내에서 각 루프가 끝날 때마다 1 씩 증가하는 int 카운터 (조미료)를 설정합니다. 함수를 디버깅 할 때 카운터가 초기화되지 않고 처음 29 가지 계산 (조미료 < 30)이 0 값으로 표시됩니다.함수에서 int 변수 초기화에 실패했습니다.

제 코드를 참조하십시오. seasoning 미만 30 때

vector<float> 
RichardRollPrepayment::ComputingCPR(
    float maturity, 
    float settledTime, 
    float frequencyPreYear, 
    float couponRate, 
    vector<float> mortgageRate 
) 
{ 
    vector<float> cprVector(ceil((maturity-settledTime) * frequencyPreYear)); 
    float seasonality[] = { 
    .94, .76, .73, .96, .98, .92, .99, 1.1, 1.18, 1.21, 1.23, .97 
    }; 
    int seasoning = int(settledTime) * 12; 

    for (int i = 0; i < cprVector.size(); i++) { 

    if (seasoning < 30) { 
     cprVector[i] = 
     (.2406 - .1389 * atan(5.952*(1.089 - couponRate/mortgageRate[i]))) 
     * (seasoning/30) * seasonality[seasoning%12]; 

     seasoning++; 
    } 

    else { 
     cprVector[i] = 
     (.2406 - .1389 * atan(5.952*(1.089 - couponRate/mortgageRate[i]))) 
     * 1 * seasonality[seasoning%12]; 

     seasoning++; 
    } 
    } 

    return cprVector; 
} 
+0

최적화 기능이 켜져 있습니까? – leppie

+0

'settledTime'의 값은 무엇입니까? 이니셜 라이저 표현식에서'int'를 제거해보십시오.'int seasoning = settledTime * 12;' – CiaPan

+0

당신의 참조는 무엇입니까? – TomHan

답변

1

, 당신은 seasoning 정수이기 때문에 0 seasoning/30으로 곱한 것입니다.

seasoning/30.0f으로 바꿉니다.

관련 문제